Web页面添加一个基类 BasePage解决登陆验证
2012-06-19 17:21
423 查看
就拿登录说事吧,如果有很多页面都需要登录之后才能看,按照一般的做法,在需要登录才能看的页面去判断有没有登录,比如查看cookie,session等等多种方式,看自己喜欢,但是每页都得写这个判断是不是有点麻烦?
那就引入基类思想,每个页面都从这个基类继承,那只需要在基类里写个判断不就不好了,简便快捷。
首先,先添加一个App_Code文件夹,在这个文件夹下添加一个类,名字随便,为了方便记忆,我这边叫做BasePage.cs,内容为:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// BasePage 的摘要说明
/// </summary>
public class BasePage : Page
{
public BasePage()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 取session信息
/// </summary>
/// <returns></returns>
public string GetUserInfo()
{
string userinfo = "";
if (Session["userinfo"] != null)
{
userinfo = Session["userinfo"].ToString();
}
return userinfo;
}
/// <summary>
/// 页面重定向
/// </summary>
private void pageRedirect()
{
Response.Redirect("Login.aspx");
}
#region PageInit
/// <summary>
/// 重载PreInit事件,实现对Theme的控制
/// </summary>
/// <param name="e"></param>
/// <remarks>
/// </remarks>
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
System.Web.Profile.ProfileBase profile;
profile = HttpContext.Current.Profile;
this.Theme = "Default";
}
/// <summary>
/// pageload时获取userinfo,判断session是否失效,如果失效返回登录页面
/// </summary>
/// <param name="e"></param>
protected override void OnLoad(EventArgs e)
{
if (GetUserInfo() == "")
{
pageRedirect();
}
base.OnLoad(e);
}
#endregion
}
在这个基类内,我们定义了2个非常简单的功能,第一:实现皮肤控制,第二:判断是否登录
然后在项目中建2个页面:一个login.aspx 一个default.aspx
login.aspx很简单,随便你怎么写,然后写入session就好
default.aspx内容为:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default :BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Session ["userinfo"]);
}
}
继承了BasePage,这样如果直接打开default.aspx会重定向到login.aspx是不是方便了许多?
这只是一种思想,你可以在基类中写很多内容,但是有利也有弊,大家可以慢慢体会。
下面是专业文章中的描述:
默认情况下,ASP.NET应用程序中的所有Wen窗体页面都继承自System.Web.UI.Page。这个类实现了作为HttpHandler的必要功能,ASP.NET运行库在检测到调用某个页面的请求时,就会调用这个类。简单地说,HttpHandler是处理请求的终端。Page类是HttpHandler用于处理和显示Web窗体的一种特定实现方式。第17章将举例说明执行HttpHandler来完成其他任务的方式。
为构建应用程序而建立体系结构模式时,找出减少冗余和灵活构建的方式总是首要的任务。一种可以采用的模式是定义一个页面基类,让所有的页面都继承这个基类,而不是System.Web.UI.Page。这样,即使最初没有使用它,也可以建立一个基础,以便添加所有页面都可见的属性和功能。这个新的基类继承自System.Web.UI.Page,这样就不必在新的页面基类中重复实现所有的功能了。这么做会使新的页面基类建立在System.Web.UI.Page类功能的基础之上。另外,这还将允许新的基类访问系统类的所有受保护的属性、方法和事件。
根据所建立的应用程序的规模和复杂性,可以考虑实现多层基本页面。例如,最底层的基本页面是一个实用类库的一部分,该类库不是本应用程序专用的。但继承这个类库是当前建立的应用程序所特定的。它可以提供在这个应用程序环境下比较有用的属性和方法,例如提供ActiveProductID。最后,如果有一组完成类似任务的页面,例如DataInput或SearchResults,就可以继承应用程序专用的基本页面,以创建一个与这组页面相关的页面。这些层都提供了扩展点,有助于减少页面中的冗余。
那就引入基类思想,每个页面都从这个基类继承,那只需要在基类里写个判断不就不好了,简便快捷。
首先,先添加一个App_Code文件夹,在这个文件夹下添加一个类,名字随便,为了方便记忆,我这边叫做BasePage.cs,内容为:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// BasePage 的摘要说明
/// </summary>
public class BasePage : Page
{
public BasePage()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 取session信息
/// </summary>
/// <returns></returns>
public string GetUserInfo()
{
string userinfo = "";
if (Session["userinfo"] != null)
{
userinfo = Session["userinfo"].ToString();
}
return userinfo;
}
/// <summary>
/// 页面重定向
/// </summary>
private void pageRedirect()
{
Response.Redirect("Login.aspx");
}
#region PageInit
/// <summary>
/// 重载PreInit事件,实现对Theme的控制
/// </summary>
/// <param name="e"></param>
/// <remarks>
/// </remarks>
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
System.Web.Profile.ProfileBase profile;
profile = HttpContext.Current.Profile;
this.Theme = "Default";
}
/// <summary>
/// pageload时获取userinfo,判断session是否失效,如果失效返回登录页面
/// </summary>
/// <param name="e"></param>
protected override void OnLoad(EventArgs e)
{
if (GetUserInfo() == "")
{
pageRedirect();
}
base.OnLoad(e);
}
#endregion
}
在这个基类内,我们定义了2个非常简单的功能,第一:实现皮肤控制,第二:判断是否登录
然后在项目中建2个页面:一个login.aspx 一个default.aspx
login.aspx很简单,随便你怎么写,然后写入session就好
default.aspx内容为:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default :BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Session ["userinfo"]);
}
}
继承了BasePage,这样如果直接打开default.aspx会重定向到login.aspx是不是方便了许多?
这只是一种思想,你可以在基类中写很多内容,但是有利也有弊,大家可以慢慢体会。
下面是专业文章中的描述:
默认情况下,ASP.NET应用程序中的所有Wen窗体页面都继承自System.Web.UI.Page。这个类实现了作为HttpHandler的必要功能,ASP.NET运行库在检测到调用某个页面的请求时,就会调用这个类。简单地说,HttpHandler是处理请求的终端。Page类是HttpHandler用于处理和显示Web窗体的一种特定实现方式。第17章将举例说明执行HttpHandler来完成其他任务的方式。
为构建应用程序而建立体系结构模式时,找出减少冗余和灵活构建的方式总是首要的任务。一种可以采用的模式是定义一个页面基类,让所有的页面都继承这个基类,而不是System.Web.UI.Page。这样,即使最初没有使用它,也可以建立一个基础,以便添加所有页面都可见的属性和功能。这个新的基类继承自System.Web.UI.Page,这样就不必在新的页面基类中重复实现所有的功能了。这么做会使新的页面基类建立在System.Web.UI.Page类功能的基础之上。另外,这还将允许新的基类访问系统类的所有受保护的属性、方法和事件。
根据所建立的应用程序的规模和复杂性,可以考虑实现多层基本页面。例如,最底层的基本页面是一个实用类库的一部分,该类库不是本应用程序专用的。但继承这个类库是当前建立的应用程序所特定的。它可以提供在这个应用程序环境下比较有用的属性和方法,例如提供ActiveProductID。最后,如果有一组完成类似任务的页面,例如DataInput或SearchResults,就可以继承应用程序专用的基本页面,以创建一个与这组页面相关的页面。这些层都提供了扩展点,有助于减少页面中的冗余。
相关文章推荐
- C# PDF Page操作——设置页面切换按钮 C# 添加、读取Word脚注尾注 C#为什么不能像C/C++一样的支持函数只读传参 web 给大家分享一个好玩的东西,也许你那块就用的到
- 继承System.Web.UI.Page的页面基类 示例(转截)
- Web开发_问题解决(2)之获取上一个页面的a标签的参数值
- iOS模态跳转的页面WebView中加载html调用本机相册会dismiss返回上一个页面解决办法
- vs2008与IIS 7.0使用在vista上时出现的问题及解决方法(Internet Explorer 无法显示该页面)(VS2008: IE Cannot Display Web Page)
- ASP.NET中使用MasterPage和PageBase页面基类(多用户session)(转)
- 所有的页面都继承自定义的BasePage,而有一个特殊页面要继承BasePage,但不想执行父类构造函数调用的某些方法,怎么办?
- 如何给登录页面添加一个验证是否是机器登录的方式(验证码)
- 继承System.Web.UI.Page的页面基类 生命周期
- #菜鸟新手EclipseJavaEE&MySQL&Tomcat#关于一个Eclipse中登陆界面通过连接MySQL数据库进行验证的小体验(感谢qq群友引燃的解答让我解决这个小问题)
- 一个发邮件的类,带验证功能,可以发html内容,可以添加附件,并解决附件乱码问题。
- (解决办法)WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)
- 继承System.Web.UI.Page的页面基类
- ASP.NET 常用方法类 - PageBase 页面基类
- 继承System.Web.UI.Page的页面基类
- 一个基于wap1.0的web项目(图文)--实现登陆验证
- 【Filter 不登陆无法访问】web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面的功能
- 【原】web页面登陆验证
- Symfony (I):添加一个Webpage(Action,Template,Helper)
- ssh框架从页面传中文发生乱码时怎么解决,就是添加一个字符编码拦截器。用springframework自带的便可