【问题标题】:Event when user navigates away from a page asp.net [duplicate]用户离开页面asp.net时的事件[重复]
【发布时间】:2013-05-04 04:45:52
【问题描述】:

加载页面时,我们使用 page_load 事件将值设置为 1。在使用 C# 的 asp.net 中,每当用户离开该页面时,我希望将值设置为 null。 Page_unload 没有帮助,因为它在页面本身加载时运行。我应该使用哪个事件?

【问题讨论】:

  • @atticae - 这个问题要求服务器端事件
  • 你是对的。我的错,对不起。
  • 在页面初始化中设置为null怎么样?

标签: c# asp.net


【解决方案1】:

离开页面不需要对服务器进行点击,因此当用户关闭浏览器时,无法保证 C# 代码的执行。

可以使用 javascript onbeforeunload 向用户发送警告消息。您可以自定义多少此消息取决于您使用的浏览器(剧透警告:FireFox 不会让您自定义此消息)。显然,这需要用户启用 javascript。

您可能能够安装一些从 onbeforeunload 事件回传到服务器的 javascript,但您必须使用它来查看是否可以让它为您的目的工作。

【讨论】:

    【解决方案2】:

    如果您打算在 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

    【讨论】:

    • 会话不会在离开页面时结束。也许你可以这样配置 Session(我不知道),但这似乎违背了 Session 的目的(即在回发中保留信息)。
    • 你是对的@jadarnel27。 +1 让我加深了对会议的理解。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      听起来您正试图在该页面上设置一个变量。一旦您离开并返回,page_load 将再次触发,您的变量将再次设置为 1。正如所说,“例如,当用户关闭浏览器时,无法保证 C# 代码的执行。”

      如果数据库中有某些内容或您需要更改的任何内容,您可以将其放入执行重定向的按钮的单击事件中。如果您需要保留某个值,则可以将其放入 Session 并在重定向之前对其进行更新(尽管根据您要完成的工作,我有比 Session 更好的解决方案。

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

      【讨论】:

        【解决方案5】:

        如果你看一下整体结构,你会意识到页面卸载不可能有服务器端事件,因为当你请求一个页面时,它被加载到内存中,并且所有的控件都被渲染。

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-23
          • 1970-01-01
          • 2015-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-24
          相关资源
          最近更新 更多