我是编写自定义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>
如何防止这种情况发生?
答案 0 :(得分:2)
基础渲染方法会在RenderBeginTag
和RenderEndTag()
中发出标记名,如果您正在进行自己的渲染,则不要调用它。如果您能提供帮助,我也不会继承HtmlGenericControl
,即使您不需要WebControl
属性,也只能继承Control
或WebControl
。
正常Render()
方法执行此操作:
protected override void Render(HtmlTextWriter writer)
{
RenderBeginTag(writer);
RenderContents(writer);
RenderEndTag(writer);
}
只要您拨打所需内容,可能需要RenderContents()
,无需拨打base.Render(writer)
。
如果您仍想覆盖HtmlGenericControl
,请务必设置TagName
property。