Razor è il nuovo view engine introdotto da ASP.NET MVC 3 e ASP.NET Web Pages. La sua facilità l'ha reso molto diffuso, poiché consente di definire in maniera molto leggibile le nostre viste. Ad esempio, per visualizzare una proprietà del nostro modello, mappato su Entity Framework, ci basta scrivere qualcosa come:
<p>@Model.Description</p>
Di default, per questioni di sicurezza, tutti gli output effettuati da Razor hanno l'encoding dell'HTML applicato. Se la nostra proprietà Description contenesse delle informazioni in formato HTML, l'effetto sarebbe quelle di renderizzarle in formato encoding, anzichè lasciarle interpretare al browser come HTML.
La soluzione consiste nel servire il contenuto usando un'istanza di tipo MvcHtmlString, che viene utilizzata proprio per indicare a Razor di non applicare l'enconding HTML all'output. Benché sia possibile restituire direttamente un'istanza di questo tipo, è preferibile creare un extension method che estenda il tipo string, come nell'esempio seguente, tenendo conto anche della possibilità che dal database arrivino valori nulli:
public static class Utils { public static MvcHtmlString AsMvcHtmlString(this string value) { if (value == null) return new MvcHtmlString(string.Empty); return new MvcHtmlString(value); } }
Sarà sufficiente, poi, utilizzarlo come in questo esempio:
<p>@Model.Description.AsMvcHtmlString()</p>
A questo punto, l'output della nostra istruzione lascerà intatti eventuali tag HTML presenti nella stringa.
E' comunque possibile utilizzare l'extension method Html.Raw, ma quest'ultimo va in errore nel caso si passi un valore nullo, cosa che il nostro metodo non fa.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Eseguire operazioni sui blob con Azure Storage Actions
Disabilitare automaticamente un workflow di GitHub
Cambiare la chiave di partizionamento di Azure Cosmos DB
Selettore CSS :has() e i suoi casi d'uso avanzati
Creare una libreria CSS universale: Cards
Ordinare randomicamente una lista in C#
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Testare l'invio dei messaggi con Event Hubs Data Explorer
Filtering sulle colonne in una QuickGrid di Blazor
Rendere le variabili read-only in una pipeline di Azure DevOps
Effettuare il refresh dei dati di una QuickGrid di Blazor