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
Utilizzare le collection expression in C#
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Code scanning e advanced security con Azure DevOps
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Generare file per il download da Blazor WebAssembly
Miglioramenti nelle performance di Angular 16
Utilizzare gli snapshot con Azure File shares
Usare il versioning con i controller di ASP.NET Core Web API
Short-circuiting della Pipeline in ASP.NET Core
Effettuare il binding di date in Blazor
Potenziare Azure AI Search con la ricerca vettoriale
Utilizzare Tailwind CSS all'interno di React: installazione