La documentación para MvcHtmlStringno es terriblemente esclarecedora:
Representa una cadena codificada en HTML que no debe codificarse nuevamente.
No me queda claro cuáles son exactamente las implicaciones de esto. Parece que algunos métodos de ayuda HTML devuelven un MvcHtmlString, pero varios ejemplos que he visto en línea de ayudantes personalizados solo devuelven una cadena normal.
Preguntas:
¿Qué es un MvcHtmlString?
Cuando debería elegir MvcHtmlStringmás stringy viceversa? ¿Por qué?
fuente

MvcHtmlStringno se implementaIHtmlStringporque eso solo existe en 4. La<%:sintaxis debe ser de tipo pato ; siempre llamará.ToHtmlString()antes,.ToString()independientemente de la interfaz.MvcHtmlString.Createmétodo detecta siIHtmlStringestá disponible y crea dinámicamente la clase devuelta para admitirlo si es: windowsitpro.com/article/net-framework/Encoding-and-Strings/…Esta es una respuesta tardía, pero si alguien que lee esta pregunta está usando la maquinilla de afeitar, lo que debe recordar es que la maquinilla de afeitar codifica todo de manera predeterminada, pero al usar
MvcHtmlStringsus ayudantes html puede decirle a la maquinilla de afeitar que no necesita codificarla .Si desea que la afeitadora no codifique una cadena, use
Descompilar Raw (), nos muestra que está envolviendo la cadena en un HtmlString
" HtmlString solo existe en ASP.NET 4.
MvcHtmlString fue un complemento de compatibilidad agregado a MVC 2 para admitir .NET 3.5 y .NET 4. Ahora que MVC 3 es solo .NET 4, es una subclase bastante trivial de HtmlString presumiblemente para MVC 2-> 3 para la compatibilidad de fuentes. " fuente
fuente
Un buen uso práctico de esto es si desea hacer sus propias
HtmlHelperextensiones. Por ejemplo, odio tratar de recordar la<link>sintaxis de la etiqueta, así que he creado mi propio método de extensión para hacer una<link>etiqueta:Podría haber regresado
Stringde este método, pero si tuviera lo siguiente se rompería:<%: Html.CssBlock(Url.Content("~/sytles/mysite.css")) %>Con
MvcHtmlString, usar cualquiera<%: ... %>o<%= ... %>ambos funcionarán correctamente.fuente
Usaría un
MvcHtmlStringsi desea pasar HTML sin formato a un método auxiliar MVC y no desea que el método auxiliar codifique el HTML.fuente
MvcHtmlStringmétodo auxiliar de HTML?