提问时间: 2008-07-24 10:48
悬赏分:20 浏览:307 次
vs2005的Global.asax文件中要添加一个开始执行处理页之前的事件,应该这样做?
在2005中是这样的
public Global()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.PreRequestHandlerExecute += new System.EventHandler(this.CheckLogin);//在转到请求的页面之前执行CheckLogin事件!
}
问题补充:在2003中是写在cs文件中的
Page TargetPage = ((sender as HttpApplication).Context.Handler) as Page
在2005中不能得到请求页面的对象??(null)
protected void Application_BeginRequest(object sender, EventArgs e)
{
bool logined = true;
/*UserBean user ;
user = UserDao.getUserInfo("Admin");
Session.Add("user",user);*/
Page TargetPage = ((sender as HttpApplication).Context.Handler) as Page;//获取当前请求的页面,HttpApplication 类,定义 ASP.NET 应用程序中的所有应用程序对象通用的方法、属性和事件。此类是由用户在 global.asax 文件中定义的应用程序的基类。即在此定义的该类中的方法、属性和事件,所有页面都能用。
//备注:此类的实例是在 ASP.NET 基础结构中创建的,而不是由用户直接创建的。一个实例在其生存期内被用于处理多个请求,但它一次只能处理一个请求。这样,成员变量才可用于存储针对每个请求的数据。
if (TargetPage == null)
return;
string TargetPageName = TargetPage.ToString().Replace("_ASP.", "").Replace("ASP.", "").Replace("_aspx", "");
if (!(TargetPageName.ToUpper().Equals("LOGIN") || TargetPageName.ToUpper().Equals("NOTLOGINED") || TargetPageName.ToUpper().Equals("FORGETPWD") || TargetPageName.ToUpper().Equals("CREATECODE") || TargetPageName.ToUpper().Equals("ENCRYPT") || TargetPageName.ToUpper().Equals("HASNORIGHTS") || TargetPageName.ToUpper().Equals("LOGOUT")))
{
try
{
if (Session["user"] == null)
logined = false;
else if (((ZCSY.Commer.Bean.UserBean)Session["user"]).ID <= 0)
logined = false;
}
catch
{
logined = false;
}
}
if (logined == false) Response.Redirect(ZCSY.Commer.Utity.Config.APPRootName + "NotLogined.aspx");
}