2010-12-12 22 views
10

Antes que nada estoy usando MVC 3 RC1 con el motor Razor view. Tengo una extensión de ayuda HTML que se parece a esto:Codificación HTML para HtmlHelper Método de extensión

public static string TabbedMenuItem(this HtmlHelper htmlHelper, string text, string actionName, string controllerName) { 
    StringBuilder builder = new StringBuilder(); 
    builder.Append("<li>"); 

    builder.Append(text); 

    builder.Append("</li>"); 
    return builder.ToString(); 
} 

Y en la vista que se llama así:

@Html.TabbedMenuItem("Home", "Index", "Home") 

El problema que tengo es que MVC es automáticamente HTML que codifica la dan lugar a la vista por lo que todo lo que consigo es la versión codificada de la cadena:

<li>Home</li> 

¿alguien sabe cómo desactivar la codificación automática de las extensiones de ayuda HTML?

Gracias de antemano Andy

+1

Para referencia futura, MVC tiene una clase System.Web.Mvc.TagBuilder que es posible que desee considerar. No niega la necesidad de devolver IHtmlString, pero viene con más funcionalidad que StringBuilder para este tipo de tarea. –

Respuesta

21
public static IHtmlString TabbedMenuItem(this HtmlHelper htmlHelper, string text, string actionName, string controllerName) 
{ 
    StringBuilder builder = new StringBuilder(); 
    builder.Append("<li>"); 

    builder.Append(text); 

    builder.Append("</li>"); 
    return MvcHtmlString.Create(builder.ToString()); 
} 

Usar valor de retorno IHtmlString. Espero que esta ayuda.

+0

Funciona a la perfección. Gracias takepara muy apreciado. – AndyM

+0

¿Debería ser 'MvcHtmlString' o es que ya no es el caso en ASP.NET MVC 3? – ehdv

+1

@ehdv buena pregunta; Lo busqué en Google y encontré (esto) [http://stackoverflow.com/a/3382908/295686] (HtmlString es preferido en .NET 4+) – mlhDev

Cuestiones relacionadas