2011-10-01 63 views
1

当用户离开页面时,它会再次触发Page_Load事件。如何在code_behind中告诉我们这种情况正在发生,以避免运行自定义函数,因为Page_Load中的代码在离开页面时并不需要运行?检测用户何时离开Page_Load事件的页面

+0

如何在用户离开页面,因为刚刚换到另一个URL通过一个HREF不会触发回传? – Christian

+0

切换asp.net选项卡容器中的选项卡页面。我在每个选项卡上都有一个不同的页面(iframe)。所以当一个标签被激活时,它会从前一个标签中激发Page_Load事件。 – TroyS

+0

使用Luke的答案!ispostback – Christian

回答

2

当用户离开它触发Page_Load事件的再次

什么做一个页面你的意思是通过离开一个页面?关闭浏览器或点击浏览器上的后退按钮?或移动到另一页? Page_Load方法在加载页面上时或在同一页面上发生回发时触发,但不会离开它。

在开始任何操作之前,您可以(也应该)确保客户端仍处于连接状态并使用HttpResponse.IsClientConnected属性。

  1. 到客户端的连接被终止:当满足下列条件为真

    的IsClientConnected属性返回false。如果调用Close方法,或者客户端停止执行Web页面或浏览到其他页面,就会发生这种情况。

  2. 处理请求的HttpWorkerRequest对象为空,或者HttpWorkerRequest.IsClientConnected方法返回false。如果自定义的HttpWorkerRequest对象处理该请求,则可以根据自定义条件设置HttpWorkerRequest.IsClientConnected方法。例如,自定义工作请求可能会在一段时间后强制超时。

http://msdn.microsoft.com/en-us/library/system.web.httpresponse.isclientconnected.aspx

编辑

切换标签通常火灾正常回发,检测到它,你应该使用:

private void Page_Load(object sender, System.EventArgs e) 
{ 
    if (!Page.IsPostback) 
    { 
     //this is first load of this page 
    } 
} 
+0

切换asp.net标签容器中的标签页。我在每个选项卡上都有一个不同的页面(iframe)。所以当一个标签被激活时,它会从前一个标签中激发Page_Load事件。 – TroyS

+0

@tszro。好的,我编辑了我的答案。我希望我的答案的第一部分也可以是有用的。 – Dariusz

+0

经过进一步调查,该页面最初已加载到每个选项卡中,因此IsPostBack只能按时评估为真。然后,当选项卡页面被激活时,前一选项卡中的网页将评估IsPostBack = False,因为该页面已被加载。所以我想我必须设置一个会话变量来保存活动标签页的名称,并用它来(运行或不运行)每个页面中的特定代码。不知道这是否对任何人有任何意义。 – TroyS

1

如果我理解正确的问题,你要寻找的IsPostBack属性:

 
private void Page_Load() 
{ 
    if (!IsPostBack) 
    { 
     // Any code here will only run the first time the page is loaded 
    } 
}