我在带有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事件之前,框架将数据绑定到每个用户控件。
我会相应地更新这个问题的标签。
答案 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如何做事件,请看一下这篇文章:
答案 2 :(得分:0)
在pageload
中使用Page.IsPostBack。
答案 3 :(得分:0)
huMpty duMpty在他的回答中应该是正确的。
在进入数据库之前,您也可以在演示者中检查IsPostBack(我认为是base.IsPostBack)。
当然这取决于您的演示者,必须始终从数据库中获取新数据,然后您可能需要查看一些参数以跳过您的数据库调用..?