Razor codifica la stringa per impostazione predefinita. Esiste una sintassi speciale per il rendering senza codifica?
Razor codifica la stringa per impostazione predefinita. Esiste una sintassi speciale per il rendering senza codifica?
Risposte:
Da ASP.NET MVC 3, è possibile utilizzare:
@Html.Raw(myString)
"myAttr='hello';myInt=10"
@(new HtmlString(myString))
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>
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.
@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))
per ASP.NET Core
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",..)
Puoi anche usare il metodo WriteLiteral
"'<>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