2015-05-04 113 views
0

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

但在此之后,我应该把新的字符串放回给它的作家,以呈现。而我无法得到它放在哪里。任何线索?

我应该改写渲染方法吗?

+0

我敢肯定,这种方法迟早会让你一些无效的HTML和/或XSS。为什么你不能只拥有不同版本的视图和更改,或者只有一个版本能够有条件地呈现特定的部分? – GSerg

+0

因为我需要这个为我的网站中的所有页面工作 – Hellraiser

+0

为什么你不渲染你的视图,然后在它返回的HTML上运行一个XSLT? –

回答

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); 
    } 

说实话,这是比这个稍微复杂一些,但这是我从开始的基础。