简体   繁体   English

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

[英]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方法在RenderBeginTagRenderEndTag()发出标记名,如果您自己进行渲染,则不要调用它。 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属性,也只能从WebControlControl继承。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM