如何解决“呈现控件时出错”的问题

  Webpart部署后在SPD中打开显示呈现控件时出错,后查到这篇文章,主要问题是在CreateChildControls中调用了this.page.Header,在设计视图时,该对象可能还不存在,以后编码时要注意在CreateChildControls尽量不调用数据库/文件系统读取、变量未附初值、调用了类似Page的属性如Session,Page.Request.QueryString等。

  在制作控件的时候容易遇到呈现控件时出错发生了未处理的异常。未将对象引用设置到对象的实例。这样的错误,如下图:(也有可能仅仅只是因为未设置runat="server"标签而导致该错误,请先检查该项。)

ControlErrorOnRender

  但是在编译时/运行时也都是没有错误的。

  分析

  如图所示的情况我们称之为设计时以区别于编译时/运行时。

  设计时:在ASP.NET环境中也就是当我们在Visual Studio中使用网页设计器进行编辑的时候。直接的理解就是在ASPX页面切换到设计的时候。

  编译时:直接的理解就是当你进行编译的时候,通常这个时候的错误是由类型检查,参数匹配等显式可直接通过语法约束所限制的错误。

  运行时:直接的理解就是当你进行预览/运行的时候。通常这个时候的错误则是由具体的异常,逻辑错误所组成的。

  让我们分析控件在设计时的表现,我们的控件在设计时的时候,VS智能地模拟输出控件在运行时的样貌,控件的呈现通过了一定顺序的方法,并最终形成了当前输出。按照标准,我们应该是在Render或RenderContents中对控件进行了输出的操作(事实上其他也是可以,但我们通常也不那么做,或者说更多的呈现控件时出错的异常主要来自于Render或RenderContents)。

  从错误的提示未将对象引用设置到对象的实例。从这一句话来看,也就是说,有一个或者以上的对象的实例在没有赋初值的情况下就被使用了。

  让我们窥视一下我们的代码:

protected override void RenderContents(HtmlTextWriter writer)
{
UpButton.Text
= Page.Server.HtmlDecode(UpButton.Text);
DownButton.Text
= Page.Server.HtmlDecode(DownButton.Text);
base.RenderContents(writer);
}

NET技术如何解决“呈现控件时出错”的问题,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。