ASP.NET MVC Razor render senza codifica


Risposte:


374

Da ASP.NET MVC 3, è possibile utilizzare:

@Html.Raw(myString)

8
Questo non è del tutto corretto. Sì, puoi inserire una stringa non elaborata, ma se hai "'<>etc...queste verranno salvate. Il modo corretto è utilizzare MvcHtmlString che consentirà caratteri "illegali". Ad esempio, se stai codificando i dati Json ... senza codificare un intero modello
Daniel B. Chapman,

4
Daniel, Html.Raw () "restituisce markup che non è codificato in HTML."
Lucas,

1
Html.Raw () codifica le virgolette ..."myAttr='hello';myInt=10"
Serge

4
NON codifica le virgolette. Oltre all'ovvia documentazione che lo afferma chiaramente come un giorno ( "Questo metodo racchiude il markup HTML usando la classe IHtmlString, che rende HTML non codificato ." ) Ho anche testato questo e le virgolette non sono codificate.
James Wilkins,


31

Oltre al già citato approccio @ Html.Raw (stringa), se si genera un MvcHtmlString, questo non verrà codificato. Questo può essere utile quando aggiungi le tue estensioni a HtmlHelper o quando restituisci un valore dal tuo modello di vista che sai potrebbe contenere html.

Ad esempio, se il modello della vista era:

public class SampleViewModel
{
  public string SampleString { get; set; }
  public MvcHtmlString SampleHtmlString { get; set; }
}

Per Core 1.0+ (e MVC 5+) utilizzare HtmlString

public class SampleViewModel
{
  public string SampleString { get; set; }
  public HtmlString SampleHtmlString { get; set; }
}

poi

<!-- this will be encoded -->
<div>@Model.SampleString</div>
<!-- this will not be encoded -->
<div>@Html.Raw(Model.SampleString)</div>
<!-- this will not be encoded either -->
<div>@Model.SampleHtmlString</div>

10

Usare @Html.Raw()con cautela in quanto si potrebbero causare ulteriori problemi con la codifica e la sicurezza. Capisco il caso d'uso in quanto ho dovuto farlo da solo, ma con attenzione ... Evita di lasciare passare tutto il testo. Ad esempio preservare / convertire solo sequenze di caratteri specifici e codificare sempre il resto:

@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))

Quindi hai la certezza di non aver creato una potenziale falla nella sicurezza e che tutti i caratteri speciali / stranieri vengano visualizzati correttamente in tutti i browser.


+1 Esattamente quello che mi serviva! La stringa deve ancora essere codificata ma i ritorni di riga devono essere html. Grazie!
Peter

@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))per ASP.NET Core
kenjiuno

5

In caso di ActionLink, generalmente utilizza HttpUtility.Encode sul testo del collegamento. In quel caso puoi usarlo HttpUtility.HtmlDecode(myString) per me quando ho usato HtmlActionLink per decodificare la stringa che volevo passare. per esempio:

  @Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.