我正在尝试在Page_Unload事件上保存一个值,将其存储在Session(或ViewState)中,然后从javascript中使用它。但是,Session的值仅在回发/刷新页面后才会更新,但我需要避免页面刷新,我该如何实现?
示例:
.cs
public void Page_Unload(object sender, System.EventArgs e)
{
string s="some text";
if (s.Contains("foo")) Session["bar"] = 37; else Session["bar"] = 38;
}
.aspx
<script type="text/javascript">
function tst() {
alert('<%=Session["bar"]%>');
}
</script>
答案 0 :(得分:2)
Page_Unload事件太晚,无法为会话状态分配新值。
相反,您希望使用Page_PreRender事件。
protected void Page_PreRender(object sender, EventArgs e)
{
string s="some text";
if (s.Contains("foo")) Session["bar"] = 37; else Session["bar"] = 38;
}
答案 1 :(得分:1)
首先,这是一个了解事件生命周期的有用页面。 http://msdn.microsoft.com/en-us/library/ms178472(v=vs.100).aspx#general_page_lifecycle_stages
当您的网页呈现时,&lt;%=会话[“栏”]%&gt;由当前值替换。由于您的页面尚未“卸载”,因此该值尚未更新。换句话说,当javascript代码运行时,不会读取此值,而是在呈现Page时。要完成您的尝试,您需要在Pre_Render中设置您的值,而不是卸载事件。
如果Pre_Render不适合您,我可以设想一个解决方案,您可以使用Asyncronous方法调用和AJAX的组合来获取代码中的值。以下是对其工作原理的引用:http://msdn.microsoft.com/en-us/library/bb398998.aspx。具体来看,最后一节正在完成您所描述的内容(即从客户端脚本中获取会话值)。
答案 2 :(得分:1)