关于页面事件重写问题

前言:
对于ASP.NET编程,事件模型是入门知识。页面事件,咱们一般用得最多的是Load事件,可是实际上页面还有Init,Render等事件可用。事件的发生顺序能够参照MSDN。本篇不谈顺序,而是谈事件的重写。
问题:
网站中有不少页面是须要权限验证的,即非登录用户无权访问。若是咱们一页一页的在PageInit事件中处理权限会很是麻烦,常见的设计就是们将这部分页面抽象出一个共同的父类RightPage,在父类中写一次PageInit的处理便可,那么凡是继承RightPage的页面都自动具有了权限验证功能。
试验:
RightPage类代码以下:
public class RightPage : System.Web.UI.Page
{
void Page_Init(object sender, EventArgs e)
        {
                //检查用户是否已经登陆
                Data.UserInfo ui = (Data.UserInfo)Session[ "userinfo"];
                //若是没有登陆则导航到登陆页面。
                 if (ui == null)
                {
                        Response.Redirect( "~/UserLogin.aspx");
                }
        }
}
这是利用了ASP.NET默认事件方法,命名规则通常是Page_事件名。好比咱们常见的Page_Load就表示Page的Load事件发生时要执行的代码。在之前的ASP.NET Web应用程序模式下,还能够看到Page.Load+=new EventHandler这样的语句,而在ASP.NET网站模式下就难看到了。
这种方法的优势是实现简单,容易理解。缺点是不方便多层次继承中的重写,由于这种默认方法中不能使用base关键字。固然,你能够使用实时绑定的办法来实现上述效果,这样就能够避免使用Page_**方法了。
 
第二种方法是重写On**方法:
         protected override void OnLoad(EventArgs e)
        {
                 base.OnLoad(e);
                 //开始验证
                //检查用户是否已经登陆
                Data.UserInfo ui = (Data.UserInfo)Session[
"userinfo"];
                //若是没有登陆则导航到登陆页面。
                
if (ui == null)
                {
                        Response.Redirect(
"~/UserLogin.aspx");
                } 
 

        }
结论:
重写时尽可能用override重写On**方法。这样方便多层继承。
相关文章
相关标签/搜索