2012-02-16 59 views
6

我使用EF4 + MVC 3剃鬚刀。EF MVC RAZOR:如何解碼PartialView輸出的HTML編碼字符串?

我有以下ActionResult,這使得一個Dictionary<string,string>成的局部視圖。

ACTION

public ActionResult combotest() 
{ 
    Dictionary<string, string> r = new Dictionary<string, string>(); 
    r.Add("<> ''", "T"); 
    ... 
    return PartialView("_mypartial", r); 
} 

現在,包含入Model.Key值特殊字符是HTML編碼,而我想用它們爲純文本。例如<> ''呈現爲&lt;&gt; &#39;&#39;

我試圖將它們與WebUtility.HtmlDecodeServer.HtmlDecode轉換沒有成功:

局部視圖(_mypartial):

<select> 
    <option value=''></option> 
    @foreach (KeyValuePair<string,string> value in (Dictionary<string, string>)Model) 
    { 
     <option value="@WebUtility.HtmlDecode(value.Key)">@value.Value 
    </option> 
    } 
</select> 

你能幫助我嗎?如果可能,我會避免使用String.Replace

+0

你可以指定出了什麼問題與其他兩種方法? – linkerro 2012-02-16 12:10:31

回答

18

顯示文本未編碼你可以使用@Html.Raw(value.key)

+0

非常感謝James! – Larry 2012-02-16 12:43:10

2

拉里,

試試這個:

<select> 
    <option value=''></option> 
     @foreach (KeyValuePair<string,string> value in (Dictionary<string, string>)Model) { 
     <option value="@Html.Raw(value.Key)">@value.Value 
    </option> 
    } 
    </select> 

Html.Raw()返回一個包裝原始字符串的HtmlString實例。 剃刀引擎知道不逃脫HtmlString實例中,從而顯示預期效果。

+0

非常感謝Jim!我接受了James的回答,僅僅因爲它是第一個。 +1 THX – Larry 2012-02-16 12:44:04

+1

不用擔心 - 我就是這麼玩的;) – 2012-02-16 12:56:16

0

考慮首先不使用「字符串」,而是IHtmlString,例如與HtmlString

例如:

public ActionResult combotest() { Dictionary<IHtmlString, string> r = new Dictionary<IHtmlString, string>(); r.Add(new HtmlString("<> ''"), "T"); ... return PartialView("_mypartial", r); }

<select> <option value=''></option> @foreach (KeyValuePair<IHtmlString,string> value in (Dictionary<IHtmlString, string>)Model) { <option value="@value.Key">@value.Value </option> } </select>

現在,你不必依賴視圖之間和控制器的隱性擔保合同(使用Html.Raw)上(提供文本這是希望安全的)。您提供的是有效的,安全的Html並從源代碼中標記它。