2015-05-04 56 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); 
    } 

說實話,這是比這個稍微複雜一些,但這是我從開始的基礎。