关于页面事件重写问题
2010-04-07 13:02
274 查看
/article/4299711.html
对于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**方法:
![](images/editer/InBlock.gif)
protected override void
OnLoad(EventArgs e)
![](images/editer/InBlock.gif)
{
![](images/editer/InBlock.gif)
base.OnLoad(e);
![](images/editer/InBlock.gif)
//开始验证
//检查用户是
否已经登录
Data.UserInfo ui = (Data.UserInfo)Session["userinfo"];
//
如果没有登录则导航到登录页面。
if (ui == null)
{
Response.Redirect("~/UserLogin.aspx");
}
![](images/editer/InBlock.gif)
}
结论:
重写时尽量用override重写On**方法。这样方便多层继承。
对于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**方法:
![](images/editer/InBlock.gif)
protected override void
OnLoad(EventArgs e)
![](images/editer/InBlock.gif)
{
![](images/editer/InBlock.gif)
base.OnLoad(e);
![](images/editer/InBlock.gif)
//开始验证
//检查用户是
否已经登录
Data.UserInfo ui = (Data.UserInfo)Session["userinfo"];
//
如果没有登录则导航到登录页面。
if (ui == null)
{
Response.Redirect("~/UserLogin.aspx");
}
![](images/editer/InBlock.gif)
}
结论:
重写时尽量用override重写On**方法。这样方便多层继承。
相关文章推荐
- 关于页面事件重写问题 推荐
- 关于页面多个文本框触发textChanged事件的问题
- Jsp页面关于BootStrap模态框和<a href onclick>事件不能同时使用,以及传参的问题
- 关于页面上某些点击事件无效的问题
- asp.net页面事件重写问题
- 关于摸态窗口,触发服务器事件会打开新页面的问题
- 关于页面实现重写问题
- 关于使用IIRF2.0 重写 导致 Cookie 不能在其它页面使用的问题
- 关于页面上某些点击事件无效的问题
- 关于页面中回车键默认触发某个控件按钮事件的问题(DefaultButton)
- 一个关于在页面写javaScript传值的问题
- 关于解决多个viewpager嵌套所遇到的事件传递问题
- 关于web.xml中配置404错误跳转页面 在ie不能显示自定义错误页面的问题
- 关于asp.net中页面事件加载的先后顺序
- 关于页面第一次加载判断所传参数的问题:
- 关于jsp页面的click事件传“821-1”字符串问题
- 关于EasyUI中的treegrid数据在页面加载慢的问题
- 关于jsp页面给Form赋值报该属性为空或不是对象问题
- 关于页面刷新,事件重复提交
- 关于launcher3 应用icon会自动添加到待机页面的问题