从JavaScript访问ASP.NET会话变量

时间:2011-09-26 13:01:12

标签: c# javascript asp.net session

何时执行代码var accNo = '<%=Session["hdnAccession"]%>';?我在Page_LoadComplete事件中更改了会话变量,但是当我使用var accNo = '<%=Session["hdnAccession"]%>';访问它时,它总是返回我设置为FIRST的值。在Page_LoadComplete中,我确实喜欢以下内容... Session["hdnAccession"] = GetNewAccession(),当我调试时,我看到每次更新Session["hdnAccession"]。但为什么它没有在JavaScript中更新?我处于无法使用HiddenField代替Seession的情况。

3 个答案:

答案 0 :(得分:2)

您需要创建一个PostBack来从JS访问会话变量。像这样:

<script type="text/javascript">
<!--
function setSessionVariable(valueToSetTo)
{
 __doPostBack('SetSessionVariable', valueToSetTo);
}
// -->
</script>

private void Page_Load(object sender, System.EventArgs e)
{
 // Insure that the __doPostBack() JavaScript method is created...
 this.GetPostBackEventReference(this, string.Empty);

 if ( this.IsPostBack )
 {
  string eventTarget = (this.Request["__EVENTTARGET"] == null) ? string.Empty : this.Request["__EVENTTARGET"];
  string eventArgument = (this.Request["__EVENTARGUMENT"] == null) ? string.Empty : this.Request["__EVENTARGUMENT"];

  if ( eventTarget == "SetSessionVariable" )
  {
   Session["someSessionKey"] = eventArgument;
  }
 }
}

见这里:http://forums.asp.net/post/2230824.aspx

答案 1 :(得分:1)

您必须使用某些服务器端控件来执行此操作(例如HiddenField或使用runat =“server”隐藏的span)。

&LT;%=会话[ “hdnAccession”]%GT;只会在您第一次进入页面时评估,而不是在回发期间进行评估。

答案 2 :(得分:0)

您的代码块在呈现页面时会获取其值,因此在Page_LoadPage_LoadCompleted中设置的任何值都应在客户端正确显示。

如果不是,则必然存在不同的问题 - 尝试通过向页面添加临时属性来测试此问题,在Page_Load中对其进行初始化并将其写入客户端(即{{1} })。

如果问题仅在执行回发后发生(从您的问题中不是很清楚),您可能必须使用隐藏字段。可能还有其他方法可以解决这个问题,但是我看不到你能够实现它们并且无法添加隐藏字段的情况。