加载页面时,我们使用 page_load 事件将值设置为 1。在使用 C# 的 asp.net 中,每当用户离开该页面时,我想将值设置为 null。Page_unload 没有帮助,因为它在页面本身加载时运行。我应该使用哪个事件?
5 回答
离开页面不需要对服务器进行点击,因此当用户关闭浏览器时,无法保证 C# 代码的执行。
您可以使用 javascriptonbeforeunload
向用户显示警告消息。您可以自定义多少此消息取决于您使用的浏览器(剧透警告:FireFox 不会让您自定义此消息)。显然,这需要用户启用 javascript。
您可能能够安装一些从onbeforeunload
事件发回服务器的 javascript,但您必须使用它来查看是否可以让它为您的目的工作。
如果您打算在 C# 中执行此操作,您也可以尝试使用Session_OnEnd事件来设置您的变量。
ASP.NET 提供了两个事件来帮助您管理用户会话。Session_OnStart 事件在新会话开始时引发,Session_OnEnd 事件在会话被放弃或到期时引发。会话事件在 ASP.NET 应用程序的 Global.asax 文件中指定。
编辑感谢@jadarnel27 的评论,我去检查了这一点。事实上,当用户关闭浏览器时,会话并没有结束。我在这里找到了一些很好的讨论:关闭浏览器或选项卡时关闭/终止会话
如果你看一下整体结构,你会发现页面卸载不可能有服务器端事件,因为当你请求一个页面时,它被加载到内存中,并且所有的控件都被渲染。
但是,当您单击页面内的链接时,只完成重定向,并且在客户端完成。所以服务器对此一无所知。它现在才知道请求了一个新页面。由于前一页已经从内存中卸载
所以解决方案必须是客户端。
或者,如果您仍然想要一个完整的服务器端解决方案,那么寻找会话存储来存储加载的页面。然后,在下一个页面的page_load事件中,可以检查最后加载的页面是这个,还是这个是新的页面。虽然这不能回答您的问题,因为只有在加载新页面时您才会收到页面卸载事件。
最好的办法是在用户关闭页面时从客户端触发 Ajax 查询。但是不能保证它会真正触发。
听起来您正试图在该页面上设置一个变量。一旦您离开并返回,page_load 将再次触发,您的变量将再次设置为 1。如前所述,“例如,当用户关闭浏览器时,无法保证 C# 代码的执行。”
如果数据库中有某些内容或您需要更改的任何内容,则可以将其放在执行重定向的按钮的单击事件中。如果您需要保留某个值,则可以将其放入 Session 并在重定向之前对其进行更新(尽管根据您要完成的工作,我有比 Session 更好的解决方案。
protected void Button1_Click(object sender, EventArgs e)
{
//change your value here
Response.Redirect("MyPage");
}