覆盖RazorView的RenderView方法

时间:2015-05-04 08:11:37

标签: asp.net-mvc razor

我正在研究一个应该扫描整个html视图的类,解析它,并替换DOM中的一些元素。为此我决定创建一个自定义RazorView并覆盖RenderView方法:我调用base.RenderView来填充编写器,然后获取其中的字符串,解析它,并最终改变我所需要的一切。

但之后我应该把新字符串放回到编写器中以便渲染它。我无法把它放在哪里。有线索吗?

我应该改写Render方法吗?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案:

    protected override void RenderView(ViewContext viewContext, TextWriter writer, object instance)
    {
        //Create a temporary writer
        TextWriter w = new StringWriter();

        //And call the base method with it
        base.RenderView(viewContext,w,instance);

        //Now I get the HTML from the temp writer
        var html = w.ToString();

        //Do my things and change the HTML

        //And finally write the changes back to the main writer
        writer.Write(html);
    }

说实话,它比这更复杂,但这是我开始的基础。