当加载页面时,我们使用page_load事件在asp.net中使用C#将值设置为1.我想在用户导航离开该页面时将值设置为null。 Page_unload没有帮助,因为它在页面加载时运行。我应该使用哪个活动?
答案 0 :(得分:3)
离开页面不需要命中服务器,因此当用户关闭浏览器时无法保证执行C#代码。
您可以使用javascript onbeforeunload
向用户发送警告消息。您可以自定义此消息的数量取决于您使用的浏览器(扰流警报:FireFox不允许您自定义此消息)。显然这需要用户启用了javascript。
您可能可以安装一些从onbeforeunload
事件发回服务器的javascript,但您必须使用它来查看是否可以将其用于您的目的。
答案 1 :(得分:1)
如果您打算在C#中执行此操作,还可以尝试使用Session_OnEnd事件来设置变量。
ASP.NET提供了两个可帮助您管理用户会话的事件。新会话启动时会引发Session_OnStart事件,并且会话被放弃或过期时会引发Session_OnEnd事件。会话事件在ASP.NET应用程序的Global.asax文件中指定。
编辑感谢@ jadarnel27的评论,我去检查了一下。实际上,当用户关闭浏览器时,会话不会结束。我在这里找到了一些很好的讨论:Close/kill the session when the browser or tab is closed
答案 2 :(得分:0)
如果你看一下整体结构,你会发现页面卸载没有可能的服务器端事件,因为当你请求一个页面时,它被加载到内存中,并且所有的控件都被渲染。 / p>
但是,当您单击页面内的链接时,只会完成重定向,并在客户端完成。所以服务器不知道它。它现在只知道请求新页面。由于前一页已从内存中卸载
所以解决方案必须是客户端 或者,如果您仍然需要完整的服务器端解决方案,那么请查找会话存储以存储加载的页面。然后,在下一页的page_load事件中,您可以检查最后加载的页面是否为此,或者这是一个新页面。虽然这不能解答您的问题,但只有在加载新页面时才会收到页面卸载事件。
答案 3 :(得分:0)
最好的办法是在用户关闭页面时从客户端发出Ajax查询。但不能保证它会实际发射。
答案 4 :(得分:0)
听起来您正试图在该页面上设置变量。一旦您离开并返回,page_load将再次触发,您的变量将再次设置为1。正如所说的那样,“当用户关闭浏览器时,无法保证执行C#代码。”
如果数据库中有某些内容或您需要更改的内容,您可以将其放入执行重定向的按钮的单击事件中。如果有一个你需要持久化的值,你可以把它放在Session中并在重定向之前更新它(尽管我的解决方案比Session更好,取决于你想要完成的任务。
protected void Button1_Click(object sender, EventArgs e)
{
//change your value here
Response.Redirect("MyPage");
}