2013-04-02 66 views
2

我正在寫一個輔助方法,將產生一個網頁上評論的HTML,我希望能夠以顯示與評論​​「< SCRIPT>警報(」你好「); </script>」,因爲它的內容。ASP.NET MVC 4的HtmlHelper - 混合解碼HTML編碼用HTML

當使用

@HttpUtility.HtmlDecode(comment.Content) 
在* .cshtml文件

,該腳本被渲染成純文本。

但在查看使用此HTML幫助時:

@Html.PendingComment(comment) 

腳本被渲染爲HTML和被執行:

public static IHtmlString PendingComment(this HtmlHelper helper, VoidCommentPending comment) 
    { 
     var sb = new StringBuilder(); 
     sb.Append("<p>" + HttpUtility.HtmlDecode(comment.Content) + "</p>"); 
     return MvcHtmlString.Create(sb.ToString()); 
    } 

試圖與 「新HtmlString()」,同樣的結果,當我將IHtmlString的返回結果更改爲字符串時,即使段落標籤也被呈現爲純文本。

是否有可能在的HtmlHelper混合編碼和解碼HTML字符串或者我應該使用不同的方法?

回答

4

好了,所以存儲註釋到數據庫之前,我用HttpUtility.Encode:

model.Content= HttpUtility.HtmlEncode(model.Content); 

然後,我只是刪除從我的助手方法

sb.Append("<p>" + comment.Content + "</p>"); 

解碼和顯示「< SCRIPT>警報( 「你好」); </SCRIPT>」作爲我的網頁上純文本。 問題解決了。

Esentially我是 「雙解碼」。隨着HttpUtility.HtmlDecode此內容:

&lt;script&gt;alert(&quot;hello&quot;);&lt;/script&gt; 

是越來越解碼爲「純文本」 HTML,我想然後MvcHtmlString.Create被對其進行解碼再次,它得到了呈現爲HTML。