2012-10-05 127 views
26

我在MVC 3和Asp.net C#中使用Razor。如何顯示在MVC 3 Razor中解碼的編碼HTML?

我有下面的代碼視圖。 model.ContentBody有一些HTML標籤。

我需要顯示此HTML內容DECODED

我怎麼更改我的代碼在View?

<div class="display-field"> 
     @Html.DisplayFor(model => model.ContentBody) 
</div> 

回答

68
<div class="display-field"> 
    @Html.Raw(Model.ContentBody) 
</div> 

此代碼解決了這個問題!

+4

你要小心的那一個,它盲目地信任文本,並將其投入到頁面作爲一個字符串。如果Model.ContentBody等於'' –

+0

謝謝,比預期的更容易 –

+0

@Andy Raddatz感謝您的提示,在我的情況下,所有的內容都經過了消毒和安全的數據庫。 – GibboK

34

@Html.Raw沒有工作對我來說這裏是例子: -

string name = "&lt;p&gt;&lt;span style=&quot;font-size: small; color: #ff0000;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&lt;span style=&quot;font-size: large; color: #000000;&quot;&gt;Hi&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;This is just a sample,&lt;br /&gt;This will not work with @Html.Raw(),&lt;br /&gt;"; 
    <span>@Html.Raw(name);</span> 

但是這個工作,而不是: -

@MvcHtmlString.Create(HttpUtility.HtmlDecode(@model.ContentBody)) 

,或者您也可以使用: -

@Html.Raw(HttpUtility.HtmlDecode(@model.ContentBody)); 
+0

看起來真的很冗長,爲什麼不用Html.Raw? – GibboK

+1

@GibboK'MvcHtmlString.Create()'是更多的語義IMO,雖然這兩種解決方案會爲你工作。 –

+0

我面臨着和你一樣的問題,現在你的職位爲我工作。 – Rajpurohit

0

通行證在「ContentBody」中將MvcHtmlString替換爲您的模型而不是字符串。

這樣你可以使用:

<div class="display-field"> 
     @model.ContentBody 
</div> 

在你的控制器獲得MvcHtmlString只需使用:

MvcHtmlString myHtmlString = MvcHtmlString.Create("htmlcodeandtext"); 
5

你也可以在控制器解碼HTML發送模型視圖前,

WebUtility.HtmlDecode()

public ActionResult Index(int id) 
    { 
     var content = _contentRepository.GetContent(id); 
     var classViewModel = new ClassViewModel 
           { 
            ContentBody = WebUtility.HtmlDecode(ClassViewModel.ContentBody) 
           }; 
     return View(classViewModel); 
    } 
1

請使用,以顯示與解碼HTML中使用。

@MvcHtmlString.Create(@Model.OurVision) 
-4

使用此代碼控制器:

string noHTML = Regex.Replace(inputHTML, @"<[^>]+>|&nbsp;", "").Trim();