Använd HtmlEncode utan HtmlEncode

Precis som rubriken säger så kan man använda HtmlEncode() utan att använda HtmlEncode(), hur logiskt som helst!

I ASP.NET 4.0 så kommer ett nytt kodblock, vilket låter oss göra just det här. Något som man väldigt ofta gör på sina sidor är att skydda sig mot HTML genom att använda HtmlEncode() runt strängen som skall skrivas ut för att bl.a. < skall bli &lt; och > skall bli &gt;. Det nya kodblocket i ASP.NET 4.0 låter oss skippa det här och gör det mycket smidigare att säkra upp sidan mot HTML.

Som exempel så har jag skapat upp ett ASP.NET MVC-projekt i Visual Studio 2010 Beta 2. Jag har inte förändrat något, utan allt är precis som det är från start.

I Index-metoden i HomeController.cs så har vi den gamla vanliga raden:

ViewData["Message"] = "Welcome to ASP.NET MVC!";

Den ser till att ett meddelande skickas till vyn. Väl i vyn så skrivs det ut med HtmlEncode för att se till att inte eventuell HTML skrivs ut:

<h2><%= Html.Encode(ViewData["Message"]) %></h2>

Det vi ska göra nu är att skicka med HTML för att se så att det fungerar som väntat.

Vi skriver om C#-koden tidigare så texten blir kursiv:

ViewData["Message"] = "<i>Welcome to ASP.NET MVC!</i>";

När vi nu ser på sidan så ser vi att texten skrivs ut precis som strängen ser ut, dvs i rent text utan att vara kursiv.

Om vi nu plockar bort Html.Encode() från aspx-filen så blir dock texten kursiv.

Med hjälp av det nya kodblocket så kan vi utan att lägga tillbaka Server.HtmlEncode() ta nytta av funktionen.

Genom att byta ut = mot : i kodblocket så körs HtmlEncode automatiskt på strängen och skriver ut den.

<h2><%: ViewData["Message"] %></h2>

Det är ett mycket renare sätt att lösa det på, då det väldigt ofta händer att man vill köra HtmlEncode.

Det här är en ny funktion i ASP.NET 4.0 och går ej att använda med någon av de tidigare versionerna.

1 Comment

Comments have been disabled for this content.