【问题标题】:How to get the session value, tempdata in external JavaScript file in asp.net MVC?如何在asp.net MVC的外部JavaScript文件中获取会话值、临时数据?
【发布时间】:2015-09-10 10:23:10
【问题描述】:

我需要访问外部 js 文件中的会话值。我试过了,

var userid = '@HttpContext.Current.Session["UserID"]';

这不起作用,因为变量 userid 将右侧作为字符串。谁能给我一个想法。

【问题讨论】:

  • 你不能。 Razor 代码不会在外部文件中解析。您需要将值分配给主视图中的变量并将其传递给外部文件中的函数(或使用全局变量)

标签: javascript c# asp.net-mvc-4


【解决方案1】:

您可以访问.cshtml中的Session变量,并通过调用外部.js文件的函数将其传递给外部javascript文件。

var userid = '@Session["UserID"]';
externalJsFunction(userid);

您可以将会话分配给某个隐藏字段,并在外部js文件中的document.ready中获取隐藏字段值(会话值)。

【讨论】:

  • 我不想在 .cshtml 中声明任何 javascript 变量,因为我想稍后缩小 js 文件。那么,在这种情况下这会有用吗??
  • 可以像externalJsFunction(@Session["UserID"]');这样直接传递session;如果你缩小,这会有什么影响?或者您可以将会话分配给某个隐藏字段并在外部js文件中的document.ready中获取隐藏字段值(会话值)。
  • 我不希望用户在检查元素或在浏览器中调试脚本时查看该值。
  • 据我所知,您无法在客户端隐藏价值。
  • 谢谢阿迪尔..传递临时数据的情况是否相同?
【解决方案2】:

我有一个解决方案给你。 在您的网站布局中定义任何空 div 并使用会话值设置其数据属性值(如果您使用的是 html5),

<div id="sessionDiv" data-id="@Session["UserID"]"></div>

现在在你的外部 js 文件中访问这个 div。

var userid=$('#sessionDiv').attr('data-id');

【讨论】:

    【解决方案3】:

    您可以在.cshtml 文件的顶部添加script 标记并将userid 分配给全局变量。然后可以在所有 javascript 文件中访问此变量。

    index.cshtml

    ...
    <script>
        document.mynamespace = {};
        document.mynamespace.userid = '@HttpContext.Current.Session["UserID"]';
    </script>
    ....
    

    javascript.js

    var userid = document.mynamespace.userid;  //do something with userid
    

    mynamespace 是一个代理对象,因此您不会污染全局命名空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-16
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 2011-04-20
      • 2012-12-06
      • 1970-01-01
      相关资源
      最近更新 更多