4

我在带有 MasterPage 的网络表单中有用户控件。MasterPage 有一个注销按钮:

protected void lbtnLogout_Click(object sender, EventArgs e)
    {
        FormsAuthentication.SignOut();
        Roles.DeleteCookie();
        Session.Clear();
        Response.Redirect("~/Account/WebLogin.aspx");
    }

当我单击注销按钮时,用户控件在调用上面的事件处理程序之前重新加载,从而对数据库进行了不必要的访问。

我应该如何处理回发?有没有办法在用户控件中忽略它?

提前致谢。

更新:我应该在前面提到。我正在使用一个实现框架“WebFormsMvp”。带有 MasterPage 的 web 表单有几个用户控件,这些用户控件是在运行时绑定到各自的演示者的视图。我没有在任何用户控件中处理 Page_Load,因为在 Page_Load 事件之前框架将数据绑定到每个用户控件。

我会相应地更新这个问题的标签。

4

4 回答 4

3

一种选择是添加一个全新的 aspx / ashx 页面以进行注销。该页面有自己的演示者(或包含具有自己的演示者的用户控件),其中包含注销逻辑(并重定向回登录页面)。

然后将您的注销链接更改为指向新页面的普通标签(而不是像您当前那样使用回发)。

这种方法与http://forums.asp.net/t/1369480.aspx/1上的第二个帖子(第一个回复)基本相同,适应了http://webformsmvp.com/的工作方式。

于 2011-11-03T20:54:39.033 回答
0

不,您不能停止(您可以覆盖但超出范围)在您的事件Load之前触发正常。ButtonASP.NET 必须重新加载控件以了解更改的内容,以便能够触发事件。为了更好地理解 ASP.NET 是如何发生的,请查看这篇文章:

ASP.NET 页面生命周期概述

于 2011-11-03T12:38:26.843 回答
0

使用Page.IsPostBackpageload.

于 2011-11-03T12:44:05.537 回答
0

huMpty duMpty 在他的回答中应该仍然是正确的。

在访问数据库之前,您也可以在演示者中检查 IsPostBack(我认为是 base.IsPostBack)。

当然,这取决于您的演示者,必须始终从数据库获取新数据,然后您可能需要查看一些参数以跳过您的数据库调用..?

于 2011-11-03T19:47:43.583 回答