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
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Gestione degli environment per il deploy con un workflow di GitHub
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Usare ASP.NET Core dev tunnels per testare le applicazioni su internet
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Configurare policy CORS in Azure Container Apps
Elencare le container images installate in un cluster di Kubernetes
Utilizzare Tailwind CSS all'interno di React: primi componenti
Usare lo spread operator con i collection initializer in C#
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Reactive form tipizzati con FormBuilder in Angular
Gestire domini wildcard in Azure Container Apps