关于页面事件重写问题

简介:
前言:
对于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**方法。这样方便多层继承。









本文转自 王杰瑞 51CTO博客,原文链接:http://blog.51cto.com/wangjierui/117609,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
C#
C#一分钟浅谈:委托与事件的实现方式
本文详细介绍了C#编程中委托与事件的基础知识及应用场景。首先解释了委托的概念,包括定义与使用方法;接着介绍了事件这一基于委托的特殊类型,展示了如何在类中定义事件及跨类订阅与处理事件;最后讨论了常见问题如事件未处理异常、重复订阅及内存泄漏等,并提出了相应的解决方案。通过本文,读者将全面掌握委托与事件的使用技巧,提升应用程序的设计与开发水平。
148 7
|
7月前
|
Java
如何在事件处理方法中获取事件的来源对象?
如何在事件处理方法中获取事件的来源对象?
|
7月前
|
程序员 iOS开发
页面的循环引用与监听事件的添加与删除,页面逻辑管理
页面的循环引用与监听事件的添加与删除,页面逻辑管理
41 0
[虚幻引擎插件介绍] DTGlobalEvent 蓝图全局事件, Actor, UMG 相互回调,自由回调通知事件函数,支持自定义参数。
本插件可以在虚幻的蓝图 Actor, Obiect,UMG 里面指定绑定和执行消息,可带自定义参数。 参数支持 Bool,Byte,Int,Int64,Float,Name,String,Text,Vector,Rotator,Transform,Object,Actor。
98 0
|
缓存 NoSQL Java
TimedCache 带时间缓存工具类,附加监听回调 | Java工具类
TimedCache 带时间缓存工具类,附加监听回调 | Java工具类
TimedCache 带时间缓存工具类,附加监听回调 | Java工具类
页面和页面里的控件的事件的执行顺序。
      第一次访问的时候的执行顺序:       1、页面的Oninit事件       2、页面的InitComplete事件       3、页面的PreLoad事件       4、页面的Page_Load事件       5、页面的LoadComplete事件     ...
784 0
|
程序员
错误:“ResourceDictionary”根元素需要 x:Class 特性来支持 XAML 文件中的事件处理程序。请移除 MouseLeftButtonDown 事件的事件处理程序.
原文:错误:“ResourceDictionary”根元素需要 x:Class 特性来支持 XAML 文件中的事件处理程序。请移除 MouseLeftButtonDown 事件的事件处理程序. 转载于(https://social.
2402 0