问题描述
这是之前的publicclassBasePage:Page{publicstringvirtualPath=ConfigurationManager.AppSettings["virtualPath"].ToString();publicBasePage(){if(Session["id"]==null){HttpContext.Current.Response.Redirect("../Login.aspx");}}}
这是修改后的publicclassBasePage:Page{publicstringvirtualPath=ConfigurationManager.AppSettings["virtualPath"].ToString();publicBasePage(){this.Load+=newEventHandler(CheckSession());}privatevoidCheckSession(objectsender,EventArgse){if(Session["id"]==null){HttpContext.Current.Response.Redirect("../Login.aspx");}}}
修改后虽然可以解决我的问题,但是有些道理不是很明白,希望各位指教一下。1.为什么普通继承Page的类不能直接在构造函数里操作session,而要加一个委托。2.为什么一般的aspx.cs里的page_load里可以操作session第一次在CSDN上提问。问了一些没有技术含量的问题,还望各位海涵。(不好意思,新手还没分)
解决方案
解决方案二:
难道没分这么惨?加个问题:每个页面继承这个basepage的时候会出现死循环是怎么回事
解决方案三:
因为前者在生成BasePage的时候执行,HttpContext.Current.Session还不存在。后者的委托,是在BasePage执行Load()的时候执行方法的,这时HttpContext.Current.Session已经存在了。
解决方案四:
死循环是因为你的Login.aspx是从BasePage继承,加载的时候CheckSession失败,就转去新的Login.aspx页面,就死循环了
解决方案五:
BasePage页面中,构造函数里面Session还没生成,所以Session是null的。在页面加载的时候才有值,不管委托的事,你可以用其他事件来检查Session是否有值。