2010-12-12 9 views
10

Zuerst verwende ich MVC 3 RC1 mit der Razor-View-Engine. Ich habe eine HTML-Helfer Erweiterung bekam, die wie folgt aussieht:HTML-Codierung für HtmlHelper-Erweiterungsmethode

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

Und auf der Ansicht, es wie folgt heißt:

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

Das Problem, das ich habe ist, dass MVC automatisch ist HTML codiert, die in der Ansicht führen, so alles, was ich die codierte Version des Strings erhalten:

<li>Home</li> 

Wer weiß, wie die automatische Codierung für Ihre HTML-Helfer-Erweiterungen deaktivieren?

Vielen Dank im Voraus Andy

+1

Für die Zukunft hat MVC eine System.Web.Mvc.TagBuilder Klasse, die Sie vielleicht in suchen. Es wird nicht die Notwendigkeit für die Rückgabe von IHtmlString, aber es kommt mit mehr Funktionalität als StringBuilder für diese Art von Aufgabe. –

Antwort

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

Verwenden Rückgabewert IHtmlString. Hoffe diese Hilfe.

+0

Funktioniert perfekt. Vielen Dank. Vielen Dank. – AndyM

+0

Sollte dies "MvcHtmlString" sein oder ist das in ASP.NET MVC 3 nicht mehr der Fall? – ehdv

+1

@ehdv gute Frage; Ich habe es gegoogelt und gefunden (http://stackoverflow.com/a/3382908/295686) (HtmlString wird in .NET 4+ bevorzugt) – mlhDev