[英]ASP.NET Server control emitting server side tags
I'm new to writing custom ASP.NET server controls, and I'm encountering the following issue: 我是编写自定义ASP.NET服务器控件的新手,并且遇到以下问题:
I have a control that inherits from System.Web.UI.HtmlControls.HtmlGenericControl
. 我有一个从
System.Web.UI.HtmlControls.HtmlGenericControl
继承的控件。 I override the control's Render method, use the HtmlTextWriter
to emit some custom HTML (basically a TD
tag with some custom attributes), and then call the case class' Render method. 我重写控件的Render方法,使用
HtmlTextWriter
发出一些自定义HTML(基本上是带有一些自定义属性的TD
标签),然后调用案例类的Render方法。
Using the control: 使用控件:
<dc:Header id="header1" runat="Server" DataColumn="MemberNumber" Width="30%">Member Number</dc:Header >
The problem is that when I view my rendered HTML, the server tag is emitted to the client as well (right after the TD
tag): 问题是,当我查看渲染的HTML时,服务器标签也会被发送到客户端(在
TD
标签之后):
<dc:Header id="ctl00_ContentPlaceHolder_testData1_testData1_header1">Member Number</dc:Header>
How do I prevent this from happening? 如何防止这种情况发生?
The base render method emits the tagnames in RenderBeginTag
and RenderEndTag()
, just don't call it if you're doing your own rendering. 基本的render方法在
RenderBeginTag
和RenderEndTag()
发出标记名,如果您自己进行渲染,则不要调用它。 I also wouldn't inherit from HtmlGenericControl
if you can help it, just inherit from WebControl
or Control
even if you need none of the WebControl
attributes. 如果您能帮助的话,我也不会从
HtmlGenericControl
继承,即使您不需要任何WebControl
属性,也只能从WebControl
或Control
继承。
The normal Render()
method does this: 普通的
Render()
方法可以做到这一点:
protected override void Render(HtmlTextWriter writer)
{
RenderBeginTag(writer);
RenderContents(writer);
RenderEndTag(writer);
}
As long as you call what you need, probably RenderContents()
in your case, no need to call base.Render(writer)
. 只要您调用所需的内容(可能是
RenderContents()
,就无需调用base.Render(writer)
。
If you still want to override HtmlGenericControl
be sure to set the TagName
property . 如果仍然要覆盖
HtmlGenericControl
确保设置TagName
属性 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.