2012-04-13 25 views
9

Tengo un proyecto ASP.NET MVC3 y estoy escribiendo algunos métodos de extensión que devuelven HTML pero necesito UrlHelper para representarlos. Para hacer eso, extiendo UrlHelper pero no me gusta la semántica porque UrlHelper debería funcionar con URL y HtmlHelper con HTML. Me gustaría extender HtmlHelper con este método en lugar de UrlHelper.Cómo llamar a UrlHelper al escribir la extensión para HtmlHelper

Mi problema es que ahora no tengo acceso a UrlHelper desde el método de extensión de HtmlHelper, ¿es posible? O tengo que seguir con las extensiones de UrlHelper.

Sé que puedo enviar Url helper como argumento, pero esta solución no me gusta demasiado.

siguiente código es muestra del método de extensión estoy hablando de:

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

Gracias

+0

posible duplicado de [Generar URL en Ayudante de HTML] (http://stackoverflow.com/questions/1443647/generate-url-in-html-helper) – Marijn

Respuesta

20

Se podría instancias de un mismo ... UrlHelper

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

Una idea interesante es la creación de instancias de la nueva operación helper _fast_ (por ejemplo, como 'new List ()')? ¿Lo recomendarás como solución a mi problema? ¿O proporcionar UrlHelper como argumento será mejor? – NightElfik

+3

En cuanto a rendimiento, sería prácticamente inadmisible. El constructor no hace nada especial aparte de establecer algunas variables privadas. 'InitHelpers' para su vista hace exactamente lo mismo, es decir, llamar al constructor. Si quiere ignorar el hecho de que un parámetro adicional para el UrlHelper 'desordene' su vista, podría agregarlo como parámetro. Sin embargo, ignoraría el hecho del rendimiento y buscaría legibilidad. – Ropstah

Cuestiones relacionadas