基类页面:
public class AdminPage:System.Web.UI.Page
    {
        protected override void OnInit(EventArgs e)
        {
           //检查cookie中user是否存在.如果不存在則跳轉
            StatusObject.CheckCookie("user", "/admin/admin_login.aspx");
            base.OnInit(e);
        }
        protected AdminPage()
        {
            
        }
}管理页面(继承adminPage)
 public partial class global_js :AdminPage
    {
        JsInfo info = new JsInfo();
        Config config = new Config();
        protected void Page_Load(object sender, EventArgs e)
        {
            //验证用户权限
            Account.CheckUserLimit("sys_m");
          
        }
错误提示:
 未将对象引用设置到对象的实例。
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
源错误:
行 164:            
int roleId =Convert.ToInt32(SecurityObject.DecryptDES(System.Web.HttpContext.Current.Request.Cookies["user"].Values["role"], key));
行 165:     提问:
   出错原因:Account.CheckUserLimit("sys_m")方法里面要读取cookie中的role值,但当cookie值不存在时,则checkuserlimit()由于无法获得roleid而报错.
  那么我该怎么样让global_js执行基类的oninit事件,如果StatusObject.CheckCookie("user", "/admin/admin_login.aspx")验证cookie不存在时,就不要再去执行global_js中的page_load事件

解决方案 »

  1.   

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
    } 应该说global_js已经继承了父类重写了的OnInit事件的。我也在父类的OnInit事件里面做是否登录的判断,子类只要继承这个类就可以了,如果没有登录则直接跳转到登陆页的。StatusObject.CheckCookie("user", "/admin/admin_login.aspx"); CheckCookie方法里面如果是 Response.Redirect(url, true);
    添加第二个参数,就是终止当前的请求直接转到新页面,要不还是会执行当前请求的Page_load
      

  2.   

    我测试了,应该是StatusObject.CheckCookie("user", "/admin/admin_login.aspx")这个方法里面的System.Web.HttpContext.Current.Request.Cookies["user"]没有判断他是否为null吧。
      

  3.   

    Response.Redirect(url, true);这里是true或者为空(默认为true),不能是false 
      

  4.   

    执行顺序
    UI.PreInit
    Page.PreInit
    UI.Init
    Page.Init
    UI.InitComplite
    Page.InitComplite
    UI.PreLoad
    Page.PreLoad
    UI.Load
    Page.Load
    UI.LoadComplete
    Page.LoadComplete
     protected override void OnInit(EventArgs O)
     {
    //检查Request.Cookies["user"].Values["role"]是否为null
     }
      

  5.   

    Response.Redirect(url, true),这里的第二个参数是是否end整个response,应该传true,等同于在你的code里面, Response.Redirect后加了一个Response.End();