In ASP.NET MVC 1.0 when using the <%= tag you had to handle any string html encoding you wanted specifically.
This was changed in ASP.NET 2.0 when generated views introduced the <%: tag which by default would html encode your string. In ASP.NET MVC 2.0 you could use the MvcHtmlString class which allowed you to avoid html encoding a string.
With .NET 4.0 you now have another option for not html encoding strings (for instance from an HtmlHelper extension method used in a ASP.NET MVC 3.0 Razor view). The interface IHtmlString and the implementing class HtmlString allows you to indicate that a string is not to be html encoded.
public static class HtmlHelperExtensions { // .NET 4.0 public static IHtmlString EmitObjectTagUnencoded(this HtmlHelper htmlHelper, string someValue) { return new HtmlString(string.Format("<object>{0}</object>", someValue)); } // ASP.NET MVC 2 public static MvcHtmlString EmitObjectTagUnencoded2(this HtmlHelper htmlHelper, string someValue) { return MvcHtmlString.Create(string.Format("<object>{0}</object>", someValue)); } public static string EmitObjectTagEncoded(this HtmlHelper htmlHelper, string someValue) { return string.Format("<object>{0}</object>", someValue); } }
Using this in a view like the following
<!DOCTYPE html> <html> <head> <title>Index</title> </head> <body> <div> @Html.EmitObjectTagUnencoded("EmitObjectTagUnencoded") </div> <div> @Html.EmitObjectTagUnencoded2("EmitObjectTagUnencoded2") </div> <div> @Html.EmitObjectTagEncoded("EmitObjectTagEncoded") </div> </body> </html>
Will yield the following html output
<!DOCTYPE html> <html> <head> <title>Index</title> </head> <body> <div> <object>EmitObjectTagUnencoded</object> </div> <div> <object>EmitObjectTagUnencoded2</object> </div> <div> <object>EmitObjectTagEncoded</object> </div> </body> </html>
Solution file is available here 2011-02-11-IHtmlString.zip
Stack overflow posting discussing the difference between MvcHtmlString and HtmlString
Stack overflow posting discussing the difference between MvcHtmlString and HtmlString
2 comments:
Thanks - this just really helped me out :)
Hi Sebastian
I am glad it was useful.
Regards
Kenneth
Post a Comment