事件,当用户从页面导航离开时

本文关键字:导航 离开 用户 事件 | 更新日期: 2023-09-27 18:12:57

当页面加载时,我们使用page_load事件将值设置为1。在asp.net中使用c#,我想在用户从该页面导航离开时设置一个值为null。Page_unload不起作用,因为它在页面本身加载时运行。我应该使用哪个事件?

事件,当用户从页面导航离开时

离开页面不需要访问服务器,所以当用户关闭浏览器时无法保证c#代码的执行。

可以使用javascript onbeforeunload向用户闪烁警告消息。这条消息的自定义程度取决于您使用的浏览器(剧透警告:FireFox不允许您自定义此消息)。显然,这需要用户启用javascript。

你可能能够装配一些javascript,从onbeforeunload事件发回服务器,但你必须玩,看看你是否可以得到它的工作为您的目的。

如果你打算在c#中这样做,你也可以尝试使用Session_OnEnd事件来设置你的变量。

ASP。NET提供了两个事件来帮助您管理用户会话。Session_OnStart事件在新会话启动时引发,Session_OnEnd事件在会话放弃或过期时引发。会话事件在全局中指定。ASP. xml文件。网络应用程序。

编辑感谢@jadarnel27的评论,我去检查了一下。实际上,当用户关闭浏览器时,会话并没有结束。我在这里发现了一些很好的讨论:当浏览器或选项卡关闭时关闭/杀死会话

最好的办法是在用户关闭页面时从客户端触发一个Ajax查询。但是不能保证它真的会发射。

听起来你想在那个页面上设置一个变量。一旦导航离开并返回,page_load将再次触发,变量将再次设置为1。如前所述,"例如,当用户关闭浏览器时,无法保证c#代码的执行。"

如果数据库中有什么东西需要改变你可以把它放在重定向按钮的click事件中。如果有一个值需要持久化,你可以把它放在Session中,并在重定向之前更新它(尽管根据你想要完成的任务,我有比Session更好的解决方案)。

protected void Button1_Click(object sender, EventArgs e)
{
    //change your value here
    Response.Redirect("MyPage");
}

如果您查看整个结构,您将意识到页面卸载不可能存在服务器端事件,因为当您请求页面时,它被加载到内存中,并且呈现所有控件。

但是,当您单击页面内的链接时,则只会进行重定向,并且是在客户端完成的。所以服务器对此一无所知。它现在只知道请求了一个新页面。因为前一页已经从内存中卸载了

所以解决方案必须是客户端。
或者,如果您仍然需要一个完全的服务器端解决方案,那么寻找会话存储来存储加载的页面。然后,在下一个页面的page_load事件中,您可以检查最后加载的页面是这个,还是一个新页面。虽然这并不能回答您的问题,因为只有在加载新页面时才会得到页面卸载事件