【问题标题】:Access ASP.NET session variable from JavaScript从 JavaScript 访问 ASP.NET 会话变量
【发布时间】:2011-11-25 05:00:23
【问题描述】:

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

【问题讨论】:

  • 你想完成什么?

标签: c# javascript asp.net session


【解决方案1】:

您需要创建一个 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

【讨论】:

    【解决方案2】:

    您必须使用一些服务器端控件来执行此操作(例如 HiddenField 或带有 runat="server" 的隐藏跨度)。

    只会在您第一次进入页面时评估,而不是在回发期间。

    【讨论】:

      【解决方案3】:

      您的代码块在页面呈现时获取其值,因此在客户端应该可以正确看到在Page_LoadPage_LoadCompleted 中设置的任何值。

      如果不是,那肯定是有不同的问题 - 尝试通过向页面添加一个临时属性来对此进行测试,在Page_Load 中对其进行初始化并将其写入客户端(即var test = "&lt;%=SomeProperty%&gt;";)。

      如果问题仅在执行回发后出现(从您的问题中不是很清楚),您可能不得不使用隐藏字段。可能有其他方法可以处理此问题,但我看不到您能够实现它们并且无法添加隐藏字段的情况。

      【讨论】:

        猜你喜欢
        • 2011-12-29
        • 1970-01-01
        • 2018-05-11
        • 1970-01-01
        • 1970-01-01
        • 2011-10-23
        • 2011-08-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多