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
Eseguire attività pianificate con Azure Container Jobs
Controllare gli accessi IP alle app con Azure Container Apps
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Evitare la script injection nelle GitHub Actions
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Utilizzare il trigger SQL con le Azure Function
Limitare le richieste lato server con l'interactive routing di Blazor 8
Eseguire attività basate su eventi con Azure Container Jobs
Copiare automaticamente le secret tra più repository di GitHub
Utilizzare i primary constructor in C#
Reactive form tipizzati con FormBuilder in Angular
Assegnare un valore di default a un parametro di una lambda in C#
I più letti di oggi
- Paginare i risultati con QuickGrid in Blazor
- Eliminare una determinata proprietà da un oggetto JavaScript
- Utilizzare il trigger SQL con le Azure Function
- Low code e pro code: come estendere Power Platform con .NET e Visual Studio
- Modernizzare le applicazioni WPF e Windows Forms con Blazor
- Q# for Quantum Programming, an "only for the brave" session