Kleiner Schock nach der Umstellung vorhandenen Codes von MVC 1 oder 2 auf MVC 3: der in eigenen Extension-Methods generierte HTML-Code wird plötzlich in der Website lesbar dargestellt. Was passiert da?
MVC 3 sorgt einfach per default dafür, dass dieser Code durch die HTMLEncode-Methode wandert. Das ist an sich eine gute Sache, weil sie Anfälligkeiten für XSS etc. verringert (wenn auch nicht ganz ausschließt).
Was hilft ist die Verwendung von IHtmlString an Stelle von String. So wird aus
1: public static string Stylesheet(this HtmlHelper htmlHelper, string stylesheetName)
2: {
3: return string.Format("<link href=\"{0}\" rel=\"stylesheet\" type=\"text/css\" />",
4: VirtualPathUtility.ToAbsolute("~/Static/" + stylesheetName) + "?" +
5: DateTime.Now.ToString("yyyyMMddHHmmssffff"));
6: }
dann
1: public static IHtmlString Stylesheet(this HtmlHelper htmlHelper, string stylesheetName)
2: {
3: return MvcHtmlString.Create(string.Format("<link href=\"{0}\" rel=\"stylesheet\" type=\"text/css\" />",
4: VirtualPathUtility.ToAbsolute("~/Static/" + stylesheetName) + "?" +
5: DateTime.Now.ToString("yyyyMMddHHmmssffff")));
6: }
und schon geht's wieder :-).