2012-02-16 53 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并从源代码中标记它。