2012-04-13 4 views
9

Ich habe ASP.NET MVC3-Projekt und ich schreibe einige Erweiterungsmethoden, die HTML zurückgibt, aber ich brauche UrlHelper für die Wiedergabe von ihnen. Um das zu tun, erweitere ich UrlHelper, aber ich mag die Semantik nicht, weil UrlHelper mit URLs und HtmlHelper mit HTML arbeiten sollte. Ich möchte HtmlHelper mit diesen Methoden anstelle von UrlHelper erweitern.So rufen Sie UrlHelper beim Schreiben von Erweiterung für HtmlHelper

Mein Problem ist, dass ich jetzt nicht wie auf UrlHelper von der Erweiterungsmethode von HtmlHelper zugreifen kann, ist es überhaupt möglich? Oder ich muss bei den Erweiterungen von UrlHelper bleiben.

Ich weiß, dass ich URL-Helfer als Argument senden kann, aber ich mag diese Lösung nicht sehr.

Code Es folgt Stichprobe von Erweiterungsmethode ich spreche:

public static HtmlString AnchorLink(this UrlHelper url, string text, string action, string anchor) { 
    return new HtmlString(string.Format("<a href=\"{0}#{2}\">{1}</a>", url.Action(action), text, anchor)); 
} 

Dank

+0

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

Antwort

20

Sie ein UrlHelper instanziiert könnte ...

public static HtmlString AnchorLink(this HtmlHelper html, string text, string action, string anchor) { 
    var urlHelper = new UrlHelper(html.ViewContext.RequestContext); 
} 
+1

Interessante Idee, ist Instanziierung neuer Helfer_fast_ Operation (zum Beispiel wie 'neue Liste ()')? Wirst du es als Lösung für mein Problem empfehlen? Oder liefert UrlHelper als Argument _better_? – NightElfik

+3

Leistungsmäßig wäre es praktisch unbemerkt. Der Konstruktor macht nichts anderes als einige private Variablen zu setzen. 'InitHelpers' für Ihre Ansicht macht genau das gleiche, nämlich den Konstruktor aufzurufen. Wenn Sie die Tatsache ignorieren möchten, dass ein zusätzlicher Parameter für den UrlHelper Ihre Ansicht "durcheinanderbringt", können Sie ihn als Parameter hinzufügen. Allerdings würde ich die Leistungsdaten ignorieren und auf Lesbarkeit achten. – Ropstah