您的位置:首页 > 其它

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,就可以继承应用程序专用的基本页面,以创建一个与这组页面相关的页面。这些层都提供了扩展点,有助于减少页面中的冗余。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐