2010-07-28 17 views
17

Estoy tratando de escribir mi propio pequeño ayudante de HTML que se parece mucho a DropDownListFor pero que no sufre del mismo problems que he encontrado antes. No discutamos si DropDownListFor tiene un error — de lo que se trata esta pregunta.ASP.NET MVC: ¿Por qué `ToMvcHtmlString` no es público?

De todos modos, ¿cuál es la razón por la cual los chicos MVC hacen ToMvcHtmlString interna y no pública?

Respuesta

8

Supongo que lo invito a usar System.Web.HtmlString en su lugar. Pero sí, me he preguntado esto y he escrito una extensión duplicada de ToMvcHtmlString en mis propios ayudantes.

MvcHtmlString es, IIRC, solo su corrección de compatibilidad, por lo que MVC 2 puede funcionar en .NET 3.5 y 4, pero incluso así sería útil usarlo en su propio código para eso.

5

¿Esto resuelve su problema?

public static MvcHtmlString SuperDenizControl(this HtmlHelper html) 
{ 
    var builder = new TagBuilder("select"); 
    //blah blah blah amazing control 
    var control = builder.ToString(); 
    return MvcHtmlString.Create(control); 
} 
+0

No es un problema, solo tengo curiosidad por saber por qué. Nombre del método Cool, por cierto! :) –

23

Pensé en publicar una solución fácil para aquellos que podrían estar buscando una y tropezar con esta pregunta.

Mientras ToMvcHtmlString es interna, es bastante fácil de pasar por alto, ya que utiliza métodos comunes:

Desde la fuente MVC:

internal MvcHtmlString ToMvcHtmlString(TagRenderMode renderMode) { 
    return MvcHtmlString.Create(ToString(renderMode)); 
} 

Tanto MvcHtmlString.Create y TagBuilder.ToString son públicos por lo basta con sustituir

return tagBuilder.ToMvcHtmlString(TagRenderMode.Normal); 

con

return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal)); 

y listo! Funciona muy bien para mi No estoy seguro de por qué se molestaron en hacer un método interno separado.

Cuestiones relacionadas