ASP.NET服务器控件发出服务器端标记

时间:2010-02-19 12:33:59

标签: asp.net render custom-server-controls

我是编写自定义ASP.NET服务器控件的新手,我遇到了以下问题:

我有一个继承自System.Web.UI.HtmlControls.HtmlGenericControl的控件。我重写控件的Render方法,使用HtmlTextWriter发出一些自定义HTML(基本上是带有一些自定义属性的TD标签),然后调用case类'Render方法。

使用控件:

<dc:Header id="header1" runat="Server" DataColumn="MemberNumber" Width="30%">Member Number</dc:Header >

问题在于,当我查看呈现的HTML时,服务器标记也会发送到客户端(在TD标记之后):

<dc:Header id="ctl00_ContentPlaceHolder_testData1_testData1_header1">Member Number</dc:Header>

如何防止这种情况发生?

1 个答案:

答案 0 :(得分:2)

基础渲染方法会在RenderBeginTagRenderEndTag()中发出标记名,如果您正在进行自己的渲染,则不要调用它。如果您能提供帮助,我也不会继承HtmlGenericControl,即使您不需要WebControl属性,也只能继承ControlWebControl

正常Render()方法执行此操作:

protected override void Render(HtmlTextWriter writer)
{
   RenderBeginTag(writer);
   RenderContents(writer);
   RenderEndTag(writer);
}

只要您拨打所需内容,可能需要RenderContents(),无需拨打base.Render(writer)

如果您仍想覆盖HtmlGenericControl,请务必设置TagName property