Reputation: 7412
I am writing various ASP.NET Server controls and am needing to remove the tags that wrap my control by default. I am aware that you can change the tag to a different tag (as in this question, How Do I Change the render behavior of my custom control from being a span) but how can you prevent it?
I am inheriting from WebControl (can also inherit from CompositeControl).
I typically get:
<span>Control output</span>
I need:
Control output
I am overriding RenderContents(HtmlTextWriter output) and the CreateChildControls() methods (across various controls). My immediate need is to address the issue using the RenderContents(HtmlTextWriter output) method.
Upvotes: 22
Views: 6291
Reputation: 3260
I don't think the accepted answer is entirely necessary. I could be wrong, but the render method calls all three:
So you should be able to just override render and manually call RenderContents:
protected override void Render(HtmlTextWriter writer)
{
this.RenderContents(writer);
}
Anyone? Maybe I'm missing something. I know this thread is old but I ran into this recently that the above was my solution.
Upvotes: 2
Reputation: 554
I was experiencing the same issue. In my case I was overriding the methods:
protected override void OnPreRender(EventArgs e)
{ /* Insert the control's stylesheet on the page */ }
and
protected override void RenderContents(HtmlTextWriter output)
{ /* Control rendering here, <span> tag will show up */ }
To prevent this, I simply replaced the RenderContents
override with the following:
protected override void Render(HtmlTextWriter output)
{ /* Control rendering, no <span> tag */ }
Hope this helps.
Upvotes: 4
Reputation: 67
A more elegant way to do this is by using the contrustor of WebControl (By default this is called with the HtmlTextWriterTag.Span)
public MyWebControl() : base(HtmlTextWriterTag.Div){}
and override the RenderBeginTag method to add custom attributes or other stuff:
public override void RenderBeginTag(HtmlTextWriter writer)
{
writer.AddAttribute("class", "SomeClassName");
base.RenderBeginTag(writer);
}
Upvotes: 4
Reputation: 68440
What about this?
public override void RenderBeginTag(HtmlTextWriter writer)
{
writer.Write("");
}
public override void RenderEndTag(HtmlTextWriter writer)
{
writer.Write("");
}
Upvotes: 39