2010-11-24 3 views
2

Ich habeWie kann ich Url.Action von einer HtmlHelper-Klasse aufrufen?

Url.Action("actionFoo", "controllerBar") 

in meinen Ansichten verwendet (aspx). Aber jetzt refactoring ich etwas von meinem Markup zu einem HtmlHelper, den ich erstellt habe.

Problem ist, ich habe nicht die richtigen Namespaces enthalten oder die Ansicht hat einige Standardobjekt Verweis, die mir nicht bekannt ist. Point ist der Compiler kann Url.Action nicht finden.

Der Einfachheit halber ist hier, was ich versuche zu tun ...

public static MvcHtmlString RenderActionButtons(this HtmlHelper helper, string actionName, string controllerName) 
{ 
    TagBuilder customActionButtonTagBuilder = new TagBuilder("a"); 
    customActionButtonTagBuilder.Attributes.Add(new KeyValuePair<string, string>("href", Url.Action(actionName, controllerName))); 
    customActionButtonTagBuilder.InnerHtml = "foo"; 
    customActionButtonTagBuilder.AddCssClass("custom-action-button"); 

    return MvcHtmlString.Create(customActionButtonTagBuilder.ToString(TagRenderMode.Normal)); 
} 

Wie verweisen ich meinen Code auf die richtige Verwendung von Url.Action?

+0

möglich Duplikat [URL generieren in HTML-Hilfs] (http aussetzt: //stackoverflow.com/questions/1443647/generate-url-in-html-helper) – Marijn

Antwort

11

Lösung ... Url ist Teil eines UrlHelper. Sie können eine Instanz des UrlHelper erhalten, wenn Sie die Htmlhelper haben wie folgt ...

new UrlHelper(helper.ViewContext.RequestContext) 

das ist das Objekt, das Url.Action