为什么我的会话值因特定值而改变?

时间:2017-11-24 16:57:55

标签: javascript session model-view-controller asp.net-mvc-viewmodel asp.net-mvc-views

有人可以帮助理解为什么我的会话值因特定值而改变了吗?03375?

我的MVC控制器代码:

Session["something"] = "03375";

我的观点是js代码:

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

结果:js提醒1789.为什么???

它适用于其他值,除了。这是一个小提琴https://dotnetfiddle.net/zLdyO8

1 个答案:

答案 0 :(得分:2)

这与asp.net会话无关。如果您在页面中执行此操作

console.log(03375);

您将获得1789

为什么会这样?

因为当浏览器的javascript运行时看到以0前缀开头的数字时,它认为它是八进制表示的数字。 实际上033751789 的八进制等效值。所以你的浏览器基本上是转换八进制值 到它的十进制等值并给你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));