【问题标题】:Why my session value changed for a particular value?为什么我的会话值更改为特定值?
【发布时间】:2017-11-24 16:57:54
【问题描述】:
有人可以帮助理解为什么我的会话值更改为特定值 03375?
我的 MVC 控制器代码:
Session["something"] = "03375";
我查看js代码:
$(function(){
alert(@Session["something"].ToString());
});
结果:js 提示 1789。为什么???
它适用于除此之外的其他值。这是一个小提琴https://dotnetfiddle.net/zLdyO8
【问题讨论】:
标签:
javascript
session
model-view-controller
asp.net-mvc-viewmodel
asp.net-mvc-views
【解决方案1】:
这与 asp.net 会话无关。如果你在你的页面中这样做
console.log(03375);
你会得到1789
为什么会这样?
因为当浏览器的 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));