2010-12-12 42 views
10

Tout d'abord, j'utilise MVC 3 RC1 avec le moteur de vue Razor. J'ai une extension d'aide HTML qui ressemble à ceci:Codage HTML pour la méthode d'extension HtmlHelper

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(); 
} 

Et sur la vue, il est appelé comme ceci:

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

Le problème que j'ai est que MVC est automatiquement HTML codant pour la résultat dans la vue donc tout ce que je reçois est la version encodée de la chaîne:

<li>Home</li> 

est-ce que quelqu'un sait comment désactiver le codage automatique pour vos extensions d'aide HTML?

Merci à l'avance Andy

+1

Pour référence ultérieure, MVC a une classe System.Web.Mvc.TagBuilder que vous voudrez peut-être examiner. Cela ne supprime pas le besoin de retourner IHtmlString, mais il a plus de fonctionnalités que StringBuilder pour ce genre de tâche. –

Répondre

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()); 
} 

Utiliser la valeur de retour IHtmlString. Espérons que cette aide.

+0

Fonctionne parfaitement. Merci takepara très apprécié. – AndyM

+0

Devrait-il s'agir de 'MvcHtmlString' ou n'est-ce plus le cas dans ASP.NET MVC 3? – ehdv

+1

@ehdv bonne question; Je l'ai googlé et trouvé (ceci) [http://stackoverflow.com/a/3382908/295686] (HtmlString est préféré dans .NET 4+) – mlhDev