使用自定义TextWriter覆盖Render方法

时间:2014-01-20 11:03:58

标签: c# asp.net controls override web-controls

我想覆盖WebControl的Render方法,但是我想使用HTMLTextWriterExtension类而不是HTMLTextWriter,它继承自HTMLTextWriter并且在其中有一些覆盖我需要的一些功能。

基类渲染(WebControl)

protected internal override void Render(HtmlTextWriter writer);

覆盖类渲染(我的类)

public override void Render(HtmlTextWriterExtension output)

上面的问题是,这不是Render方法的重写,因此在渲染期间不会调用。

我意识到这可能是因为WebControl做了同样的事情,因为它用它的HTMLTextWriter覆盖了Control的render方法。

我无法解决如何做到这一点。我可能有一个心灵倾倒,有点不适,这是星期一早上..这应该是容易的事。

无论如何,感谢您给我的任何建议。 问候。

1 个答案:

答案 0 :(得分:1)

你只需要覆盖相同的签名,然后使用你的作家,然后将作者的内容复制到原作者:

基类渲染(WebControl)

protected internal override void Render(HtmlTextWriter writer);

覆盖类渲染(我的类)

public override void Render(HtmlTextWriter output)
{
    // string builder is just an example of storage that custom TextWriter uses
    var builder = new StringBuilder();
    var myCustomWriter = new HtmlTextWriterExtension(builder);
    base.Render(myCustomWriter);
    myCustomWriter.Flush();

    // write content written from base class to original writer
    output.Write(builder.ToString()); 
}