【问题标题】:Overriding the Render method with a custom TextWriter使用自定义 TextWriter 覆盖 Render 方法
【发布时间】:2014-02-09 12:31:57
【问题描述】:

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

基类渲染(WebControl)

protected internal override void Render(HtmlTextWriter writer);

覆盖类渲染(我的类)

public override void Render(HtmlTextWriterExtension output)

上面的问题是 this 不是 Render 方法的覆盖,因此在渲染期间不会被调用。

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

我只是不知道该怎么做。我可能脑子有问题,有点病,现在是星期一早上。这应该很容易。

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

【问题讨论】:

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


    【解决方案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()); 
    }
    

    【讨论】:

    • 对不起,我搞错了,我以为Control是用TextWriter,但实际上是HTMLTextWriter。这使我相信有另一种方法。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 2013-05-24
    相关资源
    最近更新 更多