Почему мое значение сеанса изменилось для определенного значения?

1

Может кто-нибудь помочь понять, почему значение моей сессии изменилось для определенного значения, 03375?

Мой код контроллера MVC:

Session["something"] = "03375";

Мой код js:

$(function(){
 alert(@Session["something"].ToString()); 
});

Результат: js alert 1789. Почему???

Он работает только для других значений. Вот скрипка https://dotnetfiddle.net/zLdyO8

Теги:
model-view-controller
session
asp.net-mvc-views
asp.net-mvc-viewmodel

1 ответ

2
Лучший ответ

Это не имеет никакого отношения к сеансу asp.net. Если вы сделаете это на своей странице

console.log(03375);

Вы получите 1789

Почему это происходит?

Потому что, когда время выполнения JavaScript javascript видит число, начинающееся с префикса 0, оно считает, что это восьмеричное представление числа. Фактически, 03375 является восьмеричным эквивалентом 1789. Таким образом, ваш браузер в основном конвертирует восьмеричное значение в десятичный эквивалент и дает вам 1789 (браузеры обычно анализируют число до десятичного представления)

Из mdn,

Обратите внимание, что десятичные литералы могут начинаться с нуля (0), за которым следует другая десятичная цифра, но если каждая цифра после начала 0 меньше 8, число анализируется как восьмеричное число.

Это означает, что если вы пытаетесь

console.log(09375);

Он напечатает, 9375 !!!

Для обработки вашего случая идеальным решением является установка правильного значения типа. Например, если вы передаете числовое значение, просто установите числовое значение вместо строки с начальным нулем..

Session["something"] = "3375";

Или даже лучше

Session["something"] = 3375;

Затем на стороне клиента,

alert(@Session["something"]);

Если вы абсолютно хотите сохранить префикс 0, задав значение сеанса, но вы хотите, чтобы значение было номером на стороне клиента, вы можете прочитать его в строке, а затем использовать parseInt для преобразования его в тип номера

var r = '@Session["something"].ToString()';
alert(r);  // the string with leading 0
var n = parseInt(r);
alert(n);  // the number
alert(typeof(n));
  • 1
    Большое спасибо! Узнайте что-то новое сегодня! Еще раз спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню