随笔 - 45, 评论 - 1119, 引用 - 114

导航

标签

每月存档

最新留言

  • 回复: Google Talk
    本人:男 <br> 重慶 <br> 22歲 <br>2006ranyi@163.com
    by king(匿名) on 2008/2/13 15:35:00
  • 回复: Google Talk
    喜欢说英语的朋友,快加我吧!selin1991@yahoo.cn
    by selin(匿名) on 2008/2/12 11:01:00
  • 回复: Google Talk
    喜欢说英语的朋友,快快加我吧!
    by selin(匿名) on 2008/2/12 10:59:00
  • 回复: InstallShield 10.5
    请教一个问题! <br>用InstallShield 11.5 做了打包程序,编译创建成功后,运行安装程序,出现下面错误: <br> <br>“安装所需的CAB文件...
    by sundp(匿名) on 2008/1/9 14:48:00
  • 回复: InstallShield 10.5
    nq123@sina.com <br>传我一个教程,谢谢!
    by nq(匿名) on 2008/1/4 12:20:00
  • 回复: Google Talk
    欢迎游戏机行业的朋友加我:huanya88@gmail.com
    by 环亚电子(匿名) on 2007/12/28 17:55:00
  • 回复: Google Talk
    请发邀请 fang828@live.com
    by 小风(匿名) on 2007/12/27 16:49:00
  • 回复: InstallShield X 之一 演变
    我也急需要一份installshield12中文教程以及它的安装包,请哪位大侠给我一份.不胜感激. <br> <br>xingting496029631@126.com
    by 急啊(匿名) on 2007/12/27 15:13:00
  • 回复: InstallShield 10.5
    项目A的原来版本为2.01.01,现在的需求是用Installshield 11.5来打项目A的升级版本2.01.02,等客户在安装2.01.02的时候提示是否进行升级,如果客户选择了升级安装,则用2...
    by ligang(匿名) on 2007/12/26 11:27:00
  • (临时广告)招聘.net工程师(北京)
    要求: <br> <br>1.一年年以上开发经验(能力突出者可不受工作经验限制); <br>2.精通ASP.NET开发,熟悉.NET平台框架; <br>...
    by sgs(匿名) on 2007/12/5 13:12:00
  • 回复: Google Talk
    谢谢 sundeepblue@21cn.com
    by tian(匿名) on 2007/11/18 16:58:00
  • 回复: InstallShield 10.5
    tyj3@163.com <br> <br>发我一个,非常感激~!
    by tyj(匿名) on 2007/11/14 12:09:00
  • 回复: InstallShield X 之一 演变
    急需10.0的教程. <br>317953999@qq.com
    by 描述的空(匿名) on 2007/11/5 16:57:00
  • 回复: InstallShield X 之一 演变
    急需10.0的教程
    by 111(匿名) on 2007/11/5 16:56:00
  • 回复: Google Talk
    邀请我吧,拜托.我的邮箱是:xzongy@gmail.com
    by 贝贝(匿名) on 2007/11/2 12:53:00
  • 回复: InstallShield X 之一 演变
    我也急需要一份installshield10.5中文教程以及它的安装包,请哪位大侠给我一份.不胜感激. <br> <br>gavin_l_315@hotmail.com
    by gavinl315(匿名) on 2007/10/31 16:04:00
  • 回复: InstallShield X 之一 演变
    哪位仁兄有教程,发给俺一份,谢谢咯:) <br>drinkworld@163.com
    by 侠之小者(匿名) on 2007/10/17 14:26:00
  • 回复: Google Talk
    你好!我等gmail号码已经好长时间了,就是申请不下。可以邀请我吗?我的联系方式是beyondboy198406@yahoo.com.cn
    by luzhixing(匿名) on 2007/10/13 10:48:00
  • 回复: InstallShield X之二 WebForm安装-3 Application Data
    怎么才能在安装时将文件放到系统的system32路径下?
    by devilgavin(匿名) on 2007/10/12 15:25:00
  • 回复: InstallShield X 之一 演变
    installshield10.5中文教程和帮助给我一份,感激感激! <br>QQ 281567443 <br>Email:jeefo@163.com <br> ...
    by jeefo(匿名) on 2007/10/11 12:50:00
  • 回复: Google Talk
    我刚注册了一个,有50个邀请。谁要? <br>loveklose@gamil.com
    by 淘淘(匿名) on 2007/10/9 15:58:00
  • 回复: Google Talk
    talk
    by yonghonggao(匿名) on 2007/10/8 21:49:00
  • 回复: 上周五WebCast SilverLight & orcas的几个Sample
    <a target="_new" href="http://video-gratis-di-jessica-alba.ammucchiata-thn.cn"...
    by lensky(匿名) on 2007/10/7 6:49:00
  • 回复: Google Talk
    我也要一个,都下载好的, 就是没有帐号,我的邮箱是:han19830107@126.com 谢谢啦! <br>
    by 韩洪岩(匿名) on 2007/9/18 13:15:00
  • 回复: Google Talk
    Please add me if you have Gtalk. <br>polarishu2@gmail.com
    by polaris(匿名) on 2007/9/16 17:30:00

广告

 

自定义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;
         }
     }
  }

 

打印 | 张贴于 2005-09-27 17:10:00 | Tag:DOTNET

留言反馈

#re: 实现自定义page基类时需要注意的地方 编辑
怎么会到构造方法中去访问HttpContext?就算不是自定义的page基类也不应该。
2005-12-16 08:42:00 | [匿名:Soul]
#re: 实现自定义page基类时需要注意的地方 编辑
“/WebApplication1”应用程序中的服务器错误。
--------------------------------------------------------------------------------

无法找到表 0。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.IndexOutOfRangeException: 无法找到表 0。

源错误:


行 47: ds.Clear()
行 48: ds = GetDataFromDB(sqlstr)
行 49: count = ds.Tables(0).Rows.Count
行 50: ' If count > 0 Then
行 51: sqlstr = "select * from userID where " & _


源文件: C:\Inetpub\wwwroot\WebApplication1\WebFrmLogin.aspx.vb 行: 49

堆栈跟踪:


[IndexOutOfRangeException: 无法找到表 0。]
System.Data.DataTableCollection.get_Item(Int32 index)
WebApplication1.WebFrmLogin.Button1_Click(Object sender, EventArgs e) in C:\Inetpub\wwwroot\WebApplication1\WebFrmLogin.aspx.vb:49
System.Web.UI.WebControls.Button.OnClick(EventArgs e)
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain()



同样的代码我在WINDOWS窗体中运行没有错误,但把这个代码移到WEB程序中就出现这样的错误码率。请教一下这个问题是怎么产生的!
2005-09-30 15:34:00 | [匿名:augestus]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.2.0