La documentación para MvcHtmlString
no 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 MvcHtmlString
más string
y viceversa? ¿Por qué?
fuente
MvcHtmlString
no se implementaIHtmlString
porque eso solo existe en 4. La<%:
sintaxis debe ser de tipo pato ; siempre llamará.ToHtmlString()
antes,.ToString()
independientemente de la interfaz.MvcHtmlString.Create
método detecta siIHtmlString
está 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
MvcHtmlString
sus 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
HtmlHelper
extensiones. 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
String
de 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
MvcHtmlString
si desea pasar HTML sin formato a un método auxiliar MVC y no desea que el método auxiliar codifique el HTML.fuente
MvcHtmlString
método auxiliar de HTML?