实现自定义page基类时需要注意的地方
2006-12-28 22:39
417 查看
自定义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;
}
}
}
导致这一错误的最大可能的原因就是你 在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;
}
}
}
相关文章推荐
- 实现自定义page基类时需要注意的地方
- 现自定义page基类时需要注意的地方
- MSCRM 2011 自定义页面 CrmService 实现增,删,改,查需要注意的
- 【转】自定义排序函数实现时需要注意的问题
- strcpy实现需要注意的地方
- 自行实现HTTP协议时需要注意的几个地方
- 自定义圆角进度条,不是很难,却有一些需要注意的地方
- UILabel实现自适应宽高需要注意的地方(三)
- 通俗易懂地讲解Android app国际化实现方式,开发需要注意的地方
- android自定义view需要注意的地方
- FPGA中状态机实现需要注意的地方
- 用NSAttributedString实现简单的图文混排-----(确实几个需要注意的地方都注意到了就好了。)
- strcat、strcpy、strcmp的实现,以及有关字符串处理需要注意的地方
- 自定义排序函数实现时需要注意的问题
- Unity+MVC:实现IDependencyResolver接口需要注意的地方
- UILabel实现自适应宽高需要注意的地方(二)
- JAXB实现XML和java对象互转以及soapXml和对象互转需要注意的地方
- UILabel实现自适应宽高需要注意的地方
- python3实现一维数组求最大值返回参数需要注意的地方
- 自定义组件中使用枚举类型时需要注意的地方