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
Estrarre dati randomici da una lista di oggetti in C#
Creare una libreria CSS universale: Immagini
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Gestire i dati con Azure Cosmos DB Data Explorer
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Migliorare la sicurezza dei prompt con Azure AI Studio
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Gestire la cancellazione di una richiesta in streaming da Blazor
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste