23

我正在编写各种 ASP.NET 服务器控件,并且需要删除默认情况下包装我的控件的标签。我知道您可以将标签更改为不同的标签(如在这个问题中,我如何将自定义控件的呈现行为从 span 更改为)但是您如何防止它呢?

我从 WebControl 继承(也可以从 CompositeControl 继承)。

我通常会得到:

<span>Control output</span>

我需要:

Control output

我正在覆盖 RenderContents(HtmlTextWriter 输出) 和 CreateChildControls() 方法(跨各种控件)。我迫切需要使用 RenderContents(HtmlTextWriter output) 方法来解决这个问题。

4

4 回答 4

39

那这个呢?

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

    public override void RenderEndTag(HtmlTextWriter writer)
    {
        writer.Write("");
    }
于 2010-09-30T16:08:37.570 回答
3

一个更优雅的方法是使用 WebControl 的 contrustor(默认情况下使用 HtmlTextWriterTag.Span 调用)

public MyWebControl() : base(HtmlTextWriterTag.Div){}

并覆盖 RenderBeginTag 方法以添加自定义属性或其他内容:

public override void RenderBeginTag(HtmlTextWriter writer)
    {
        writer.AddAttribute("class", "SomeClassName");
        base.RenderBeginTag(writer);
    }
于 2013-01-25T10:27:47.877 回答
3

我遇到了同样的问题。就我而言,我正在覆盖这些方法:

protected override void OnPreRender(EventArgs e)
    { /* Insert the control's stylesheet on the page */ }

protected override void RenderContents(HtmlTextWriter output)
        { /* Control rendering here, <span> tag will show up */ }

为了防止这种情况,我简单地将RenderContents覆盖替换为以下内容:

protected override void Render(HtmlTextWriter output)
        { /* Control rendering, no <span> tag */ }

希望这可以帮助。

于 2013-12-06T16:31:38.847 回答
2

我认为接受的答案不是完全必要的。我可能是错的,但渲染方法调用了所有三个:

  • 渲染开始标签
  • 渲染内容
  • 渲染结束标签

所以你应该能够覆盖渲染并手动调用 RenderContents:

protected override void Render(HtmlTextWriter writer)
{ 
    this.RenderContents(writer);
}

任何人?也许我错过了一些东西。我知道这个线程很旧,但我最近遇到了这个问题,上面是我的解决方案。

于 2016-04-18T19:12:24.927 回答