如何将会话值传递给JavaScript?

4
当我的页面加载时,它会将来自数据库的id存储到会话中:Session["AppId"] = 1234。然而,在进行JavaScript操作时,我需要知道用于数据库调用的AppId。如何使服务器代码中的该值对我的JS可用?注册一个带有var appId = 1234的脚本标记是否是正确的方法,还是这段代码有点过时了?
在body标签中添加一个自定义属性是否更合理?例如data-appid=1234
我是Web开发新手,因此并不总是清楚应该做什么或不应该做什么。如果有正确/最佳的方法,请随意分享。
编辑:实际上我需要的解决方案是HttpContext.Current.Session["AppId"]。我以为静态方法不能访问会话值,所以我认为必须将其存储在标记中通过Ajax调用传递给我的WebMethod。我接受了我之前提出的答案,因为它回答了我提出的问题。只是我问错了问题。 =) 我是新手-请多包涵!
3个回答

4

有很多种方法可以实现这一点:

  • 就像您发布的那样,使用data-* 属性
  • 隐藏表单字段(如果页面上有表单)
  • 嵌入URL中
  • 输出到JavaScript变量中

没有共识哪种方法最好。


您还可以嵌入由PHP脚本生成的动态JSON文件。 - ComFreek
@ComFreek - 你假设了 PHP。 - Oded
你说得对,但 JSON 几乎可以被任何语言生成。 - ComFreek
@Oded 这里有一个开发人员提到了 IRequiresSessionState 接口。他让我觉得我可以在我的 aspx.cs 文件中使用该接口,但似乎并不起作用。这可行吗? - Yatrix
@Oded提到使用它来向静态页面方法公开会话值,这些方法是我的JavaScript用于数据库调用的。如果可能的话,我根本不需要将它们存储在标记中。我不知道静态方法可以访问Session值,因为它们没有访问Page的权限。当他提到时,我已经发布了这个问题。 - Yatrix
显示剩余2条评论

4
您可以创建一个隐藏字段或使用全局变量。
隐藏字段:
```html ```
全局变量:
```javascript window.myVariable = "myValue"; ```
<input type="hidden" value='<%= Session["AppId"] %>'></input>

全局变量:

<script type="text/javascript">
window.AppId = '<%= Session["AppId"] %>';
</script>

0

个人而言,我将会话值输出到全局变量中,如下所示:

<script type="text/javascript">
    <?php
    if(isset($_SESSION["AppId"]))
    {
        echo "var AppId=".$_SESSION["AppId"].";";
    }
    else
    {
        echo "var AppId=null;";
    }
    ?>
</script>

或者...

虽然我不确定您的客户端应用程序如何运作,但在实际进行数据库查询时,您是否可以在服务器端检查AppID值?

这样,AppID值就永远不会显示给用户,他们也无法通过JavaScript来更改该值。


AppId并不重要,它只是为了让数据库知道返回哪个数据集。这些数据没有任何可能会造成危害的含义。 - Yatrix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接