【问题标题】: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));
    

    【讨论】:

    • 非常感谢!今天学习新东西!再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2016-12-19
    • 2019-01-07
    • 2023-03-29
    • 2014-03-26
    相关资源
    最近更新 更多