2012-02-16 14 views
6

Sto usando EF4 + MVC 3 con Razor.EF MVC RAZOR: Come decodificare le stringhe codificate HTML di un output di PartialView?

Ho il seguente ActionResult, che esegue il rendering di Dictionary<string,string> in una vista parziale.

AZIONE

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

Ora, caratteri speciali contenute nei valori Model.Key sono HTML codificati, mentre mi piacerebbe usarli come testo normale. Ad esempio, <> '' viene visualizzato come &lt;&gt; &#39;&#39;.

ho cercato di convertirli con WebUtility.HtmlDecode o Server.HtmlDecode senza successo:

Parziale vista (_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> 

Potrebbe aiutarmi? Eviterei di usare String.Replace, se possibile.

+0

Potresti specificare cosa è andato storto con gli altri due approcci? – linkerro

risposta

18

Per visualizzare il testo in chiaro è possibile utilizzare @Html.Raw(value.key)

+0

Grazie mille James! – Larry

2

Larry,

provare questo:

<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() restituisce un'istanza HtmlString che avvolge la stringa originale. Il motore Razor sa di non sfuggire alle istanze di HtmlString, pertanto la visualizzazione è come previsto.

+0

Grazie mille Jim! Ho accettato la risposta di James solo perché era la prima. +1 THX – Larry

+1

non preoccuparti - è così che vorrei giocare anche io;) –

0

Considerare di non utilizzare "stringa" in primo luogo, ma piuttosto IHtmlString, ad esempio con HtmlString.

Ad esempio:

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>

Ora, non dovete fare affidamento su un contratto di sicurezza implicita tra la vista (utilizzando Html.Raw) e il controller (di testo che fornisce si spera che sia sicuro). Stai fornendo un codice HTML valido e sicuro e lo contrassegni come tale dalla fonte.

Problemi correlati