2010-11-25 63 views
377

我已經將保存在數據庫表格中的安全/已過濾的HTML保存起來。寫入/輸出未經過轉義的HTML字符串

如何將此HTML內容寫入Razor視圖?

它總是轉義字符如<和&符號&amp;

+62

下面來救人的討論很長的歷史 - `@ Html.Raw()` – 2013-06-06 23:19:33

+0

要保存我這樣的人試圖用匿名類型的動態類型做到這一點意見,這不會工作 - 看到[這個答案](http://stackoverflow.com/a/31306368/957950)我的更具體的問題。儘管如果您的情況允許,使用強類型視圖的方法仍然更好。 – brichins 2015-07-09 01:00:00

回答

571

假設您的內容是一個名爲mystring字符串中...

您可以使用:

@Html.Raw(mystring) 

或者您可以將字符串轉換爲HtmlString或在模型或直接實現IHtmlString任何其他類型內聯和使用常規@

@{ var myHtmlString = new HtmlString(mystring);} 
@myHtmlString 
+0

感謝您的回答。幫助我完成了我正在學習的一些小任務。 :)但是我使用的是最新版本的MVC3,至今沒有Html.Raw :( – 2010-12-14 13:19:10

+1

您好Sergio。我正在使用MVC 3,並且正在使用原始方法 – 2011-01-29 02:10:26

+1

謝謝你的回答!我仍然在學習MVC 3,這是逃避我 – 2011-04-20 04:25:09

70

在ASP.NET MVC 3你應該做的是這樣的:

// Say you have a bit of HTML like this in your controller: 
ViewBag.Stuff = "<li>Menu</li>" 
// Then you can do this in your view: 
@MvcHtmlString.Create(ViewBag.Stuff) 
49

您可以使用

@{ WriteLiteral("html string"); } 
4

你可以把你的字符串轉換成可視數據在控制器這樣的:

ViewData["string"] = DBstring; 

然後調用像這樣的觀點,即可視數據:

@Html.Raw(ViewData["string"].ToString()) 
8

有時使用原始html可能會很棘手。主要是由於XSS漏洞。如果這是一個問題,但你仍然想使用原始html,你可以編碼可怕的部分。

@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)") 

結果

(<b>&lt;script&gt;console.log('insert')&lt;/script&gt;Hello</b>)