如何通过主页上的按钮单击来处理用户控制中的回发

时间:2011-11-03 12:31:13

标签: asp.net webformsmvp

我在带有MasterPage的webform中有usercontrol。 MasterPage有一个注销按钮:

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

当我单击注销按钮时,usercontrol正在重新加载,然后调用上面的eventhandler,从而不必要地访问数据库。

我该如何处理回发?有没有办法在usercontrol中忽略它?

提前致谢。

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

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

4 个答案:

答案 0 :(得分:3)

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

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

这种方法与http://forums.asp.net/t/1369480.aspx/1的第二篇文章(第一次回复)基本相同,适用于http://webformsmvp.com/的工作方式。

答案 1 :(得分:0)

不,你可以在Load事件之前停止(你可以覆盖但超出范围)正常Button。 ASP.NET必须重新加载控件才能知道更改的内容才能触发事件。为了更好地理解ASP.NET如何做事件,请看一下这篇文章:

ASP.NET Page Life Cycle Overview

答案 2 :(得分:0)

pageload中使用Page.IsPostBack

答案 3 :(得分:0)

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

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

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