Render RenderContents RenderControl 三个方法的区别

amingo 2008-12-02 07:31:46
Render RenderContents RenderControl 三个方法的区别
...全文
472 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangSu396116038 2010-08-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 criedshy 的回复:]
控件生命周期的Render阶段, 主要将控件标记和字符文本输出到 服务器控件输出流 中. 可以直接写Html标记, 也可以调用每个控件都有的RenderControl方法到输出流. 在WebControl基类中, 以Render开头的呈现方法有如下几个:



Ø RenderControl(HtmlTextWriter writer)

Ø Render(HtmlTextWrit……
[/Quote]

你这是完全照搬别人的答案:http://blog.csdn.net/ChengKing/archive/2009/01/01/3678388.aspx
KEL-1 2009-12-27
  • 打赏
  • 举报
回复
首先RenderControl方法是判断是否要调用Reder方法,Render方法内会依次的调用RenderBeginTag、RenderContents、RenderEndTag这3个方法,而RenderContents则是这个方法的核心
leo_bogard 2008-12-02
  • 打赏
  • 举报
回复
up
wuyq11 2008-12-02
  • 打赏
  • 举报
回复
在control类中定义了三个与呈现有关的方法,分别是Render方法,RenderChildren方法和RenderControl方法.其中RenderControl方法是public的方法
RenderControl方法用于供外部类进行调用,以生成控件,如父控件调用子控件的Rendercontrol方法.在RenderControl方法只是作了是否显示该控件的判断,如果显示则调用控件的被保护方法Render.
Render方法是呈现控件的核心方法,在现实性自定义控件中,我们一般都是通过重写Render方法来呈现控件的,如果控件是一个容器控件,就要重写RenderChildren方法来呈现子控件.

criedshy 2008-12-02
  • 打赏
  • 举报
回复
控件生命周期的Render阶段, 主要将控件标记和字符文本输出到 服务器控件输出流 中. 可以直接写Html标记, 也可以调用每个控件都有的RenderControl方法到输出流. 在WebControl基类中, 以Render开头的呈现方法有如下几个:



Ø RenderControl(HtmlTextWriter writer)

Ø Render(HtmlTextWriter writer)

Ø RenderBeginTag(HtmlTextWriter writer)

Ø RenderContents(HtmlTextWriter output)

Ø RenderEndTag(HtmlTextWriter writer)



以上几Render方法中, 并不是毫无联系的, 它们的执行顺序是从上往下, 且有嵌套的调用关系. 其中在RenderControl方法内部会调用Render方法, 在Render方法内部会依次调用RenderBeginTag, RenderContents和RenderEndTag.

其中RenderControl和Render是Control基类中的方法, 因为WebControl本身也是继承Control的. 一般在开发基本控件时, 我们只需求重写RenderContents方法即可, 在此方法中可以把控件Html文本标记和其它内容写到输出流中.

另外, 还有两个可以重载的方法 RenderBeginTag和RenderEndTag, 这两个方法执行时刻点是分别在Render控件内容之前和之后. 可以重写这两个方法自已定义控件的起始和结束标记. 默认情况下控件是以<Span></Span>作为控件起始和结束标记的, 下面是没有重写标记的一个例子的默认显示,








下面以一个例子来演示使用上面几个方法, 新建一个RenderOrderControl.cs Web控件类, 重载以下几个方法, 并填充相应语句, 修改后代码如下所示 :



/// <summary>

/// Render方法执行顺序: 3

/// </summary>

public override void RenderBeginTag(HtmlTextWriter writer)

{

//base.RenderBeginTag(writer);

writer.AddAttribute( HtmlTextWriterAttribute.Id, this.ID);

writer.RenderBeginTag(HtmlTextWriterTag.Div);

}

/// <summary>

/// Render方法执行顺序: 4

/// </summary>

protected override void RenderContents(HtmlTextWriter output)

{

output.Write(Text);

}

/// <summary>

/// Render方法执行顺序: 5

/// </summary>

public override void RenderEndTag(HtmlTextWriter writer)

{

//base.RenderEndTag(writer);

writer.RenderEndTag();

}


上面代码仅Render出控件Text属性文本. 另外, 重写了控件起始和结尾标签












http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx

lovehongyun 2008-12-02
  • 打赏
  • 举报
回复
Render 方法将 Web 控件发送到指定的 HtmlTextWriter 实例。重写此方法以将自定义服务器控件发送到客户端。
Render 方法首先调用 RenderBeginTag 方法,然后调用 RenderContents 方法,最后调用 RenderEndTag 方法来将控件发送到客户端。

重写 RenderContents 方法以呈现开始和结束标记之间的控件内容。此方法的默认实现会呈现所有子控件。
如果控件具有子控件,则必须在要将子控件呈现到文本编写器的位置调用基 RenderContents 方法或调用 RenderChildren。



RenderControl(此方法不应参与上面两个方法的比较)
输出服务器控件内容,并存储有关此控件的跟踪信息(如果已启用跟踪)。

heyu1000 2008-12-02
  • 打赏
  • 举报
回复
每个页面都有一个控件树,代表本页面所拥有的所有子控件,页面控件就是控件树的根,为了生成控件树,页面将建立一个HtmlTextWriter类的实例,在这个实例中封装了相应流,接着页面会把HtmlTextWriter对象传递给RenderControl,RenderControl会检查控件的Visible属性是否为真,如果是真,RenderControl会调用Render方法,而Render方法会去调用RenderContents,RenderContents方法负责将控件的内容呈现到指定的编写器中,如果控件有子控件的话,Render方法又会把HtmlTextWriter传递给RenderChildren方法,RenderChildren方法负责生成控件的子控件。

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧