1

我可以使用以下方式将会话变量存储在 aspx 页面中:

  $(document).ready(function () {
            var userName = "webruster";
            '<%Session["UserName"] = "' + userName + '"; %>';
           alert('<%=Session["UserName"]%>');
        });

现在,当我尝试检索时,Session["UserName"]我无法在 cs 中获得该值。为此,我有一个解决方法,但想知道它失败的原因?

替代方式:

声明隐藏的变量和链接按钮

$(document).ready(function () {
            var userName = "webruster";
            '<%Session["UserName"] = "' + userName + '"; %>';
            var x = document.getElementById("<%=hdnsessionvalue.ClientID %>");
            x.value = '<%=Session["UserName"] %>';

           document.getElementById('<%= lnkButton1.ClientID %>').click();
        });

所以我能够onclick在服务器端检索事件中的值。

我的问题: 那么为什么我无法使用第一种方法检索 cs 中的会话值(即没有分配给隐藏变量)

4

2 回答 2

5

如果您的意思是“客户端java脚本”,那么您不能,至少不能直接。会话数据存储在服务器上,客户端在不与服务器通信的情况下看不到它。

要访问它,可以发出 HTTP 请求并让服务器端修改或返回数据。

更新

例子

<script>
       // get the variable
       var data = JSON.Stringify(yourVariable);

       // Make the ajax call
       $.ajax({
         type: "POST",
         url: "aspPage.aspx/Method", //method we will call
         contentType: "application/json; charset=utf-8",
         data: {value: data }, //assign the 'data' values to 'value', its the data you want to send 
         dataType: "json",
         success: function (result) {
             alert('its working');               
         },
         error: function (result) {
             alert('something wrong');
         }
     });
  </script>

在 aspPage.aspx 上

[WebMethod]
public static void Method(string value)
{
  sting val = value; // Do whatever you want to 
}
于 2015-08-27T05:25:56.553 回答
2

您不能直接从 javascript 设置或使用 Session,因为它是一种服务器端状态管理技术。为此,您应该使用隐藏字段。

将 javascript 变量设置为隐藏字段并在后面的代码中,获取隐藏字段值并将其设置为所需的会话。

您可以通过以下方式实现:
Java Script

$(document).ready(function () {
    var userName = "webruster";
    var x = document.getElementById("<%=hdnsessionvalue.ClientID %>");
    x.value = userName;

    document.getElementById('<%= lnkButton1.ClientID %>').click();
});

代码隐藏 (CS)

protected void lnkButton1_Click(object sender, EventArgs e) 
{ 
    string test = hdnsessionvalue.Value; 
    Session["UserName"] = test ; 
}
于 2015-08-27T06:07:56.990 回答