实现自定义page基类时需要注意的地方

自定义Page集类可以带来很多好处,如统一处理Cookie,安全性,参数等。不过在继承System.Web.UI.Page实现自己的 BasePage时需要注意一点:谨慎的处理构造器(Constructor)中涉及的代码。如果疏忽了这点,可能会导致你在Vs.Net中无法所见即所 得的编辑Aspx页面,打开页面时将抛出以下错误,你只能看到Html代码界面。

 

导致这一错误的最大可能的原因就是你 在BasePage的构造器里使用了HttpContext的内容。而Vs.Net在显示所见即所得的Aspx页面时会初始化你的BasePage类,这 时候如果使用了Request,Response等类时,由于HttpContext并不存在(因为不是在IIS环境中,没有PageFactory传递 过来Http上下文),所以在初始化类时就抛出了NullReferenceException。

为了解决此问题,最好将访问HttpContext的代码放到OnInit中,如下:

  protected override void OnInit(EventArgs e)
  {
      base.OnInit (e);
      HttpCookieCollection cookies = HttpContext.Current.Request.Cookies;
  }

这一override方法指示在PageHandler阶段被首先调用,而Vs.Net显示页面时并不会调用此方法,所以不会产生NullReferenceException。

如果你确实需要在构造器中进行某些Field的初始化等工作,这时又需要使用Request等内容,那么就需要先判断HttpContext是否为Null。如下:

 public class BasePage : Page
 {
    public BasePage()
    {
         if(HttpContext.Current != null)
         {
             HttpCookieCollection cookies = HttpContext.Current.Request.Cookies;
         }
     }
  }

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值