Program.X
Program.X

Reputation: 7412

Prevent wrapping <span> tags for ASP.NET server control

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

Answers (4)

user1447679
user1447679

Reputation: 3260

I don't think the accepted answer is entirely necessary. I could be wrong, but the render method calls all three:

  • RenderBeginTag
  • RenderContents
  • RenderEndTag

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

Mike Gilmore
Mike Gilmore

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

Jim Bosch
Jim Bosch

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

Claudio Redi
Claudio Redi

Reputation: 68440

What about this?

    public override void RenderBeginTag(HtmlTextWriter writer)
    {
        writer.Write("");
    }

    public override void RenderEndTag(HtmlTextWriter writer)
    {
        writer.Write("");
    }

Upvotes: 39

Related Questions