2012-04-13 8 views
9

Ho un progetto ASP.NET MVC3 e sto scrivendo alcuni metodi di estensione che restituiscono HTML ma ho bisogno di UrlHelper per renderli. Per fare ciò sto estendendo UrlHelper ma non mi piace la semantica perché UrlHelper dovrebbe funzionare con URL e HtmlHelper con HTML. Mi piacerebbe estendere HtmlHelper con questi metodi invece di UrlHelper.Come chiamare UrlHelper durante la scrittura dell'estensione per HtmlHelper

Il mio problema è che non ora come accedere a UrlHelper dal metodo di estensione di HtmlHelper, è possibile? O devo attenermi alle estensioni UrlHelper.

So che posso inviare Url helper come argomento ma non mi piace molto questa soluzione.

Seguendo codice è esempio di metodo di estensione sto parlando:

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

Grazie

+0

possibile duplicato del [Genera URL Helper HTML] (http://stackoverflow.com/questions/1443647/generate-url-in-html-helper) – Marijn

risposta

20

Si potrebbe istanziare un UrlHelper te stesso ...

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

L'idea interessante, è l'istanziazione di un nuovo helper _fast_ operation (per esempio come 'new List ()')? Lo consiglieresti come soluzione al mio problema? O fornire UrlHelper come argomento sarà _better_? – NightElfik

+3

Per quanto riguarda le prestazioni, sarebbe praticamente impercettibile. Il costruttore non fa nulla di speciale, quindi imposta alcune variabili private. 'InitHelpers' per la tua vista fa esattamente lo stesso, cioè chiama il costruttore. Se si desidera ignorare il fatto che un parametro aggiuntivo per UrlHelper "ingombrera" la vista, è possibile aggiungerla come parametro. Tuttavia, ignorerei il fatto delle prestazioni e andrei a migliorare la leggibilità. – Ropstah

Problemi correlati