Normalmente en una vista ASP.NET se podría usar la siguiente función para obtener una URL (no una <a>
):
Url.Action("Action", "Controller");
Sin embargo, no puedo encontrar cómo hacerlo desde un asistente HTML personalizado. yo tengo
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
}
}
La variable auxiliar tiene los métodos Action y GenerateLink, pero generan <a>
los de. Cavé un poco en el código fuente ASP.NET MVC, pero no pude encontrar una manera directa.
El problema es que la Url anterior es miembro de la clase de vista y para su creación de instancias necesita algunos contextos y mapas de ruta (con los que no quiero tratar y no se supone que lo haga de todos modos). Alternativamente, la instancia de la clase HtmlHelper también tiene algún contexto que supongo que es la cena del subconjunto de la información de contexto de la instancia de Url (pero nuevamente no quiero tratar con ella).
En resumen, creo que es posible, pero dado que todas las formas en que pude ver, implican alguna manipulación con algunas cosas más o menos internas de ASP.NET, me pregunto si hay una mejor manera.
Editar: por ejemplo, una posibilidad que veo sería:
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
urlHelper.Action("Action", "Controller");
}
}
Pero no parece correcto. No quiero tratar con instancias de UrlHelper yo mismo. Debe haber una manera más fácil.
fuente
Respuestas:
Puede crear un asistente de URL como este dentro del método de extensión de ayuda html:
fuente
new UrlHelper(htmlHelper.ViewContext.RequestContext, htmlHelper.RouteCollection)
También puede obtener enlaces usando
UrlHelper
la clase pública y estática:En este ejemplo, no tiene que crear una nueva clase UrlHelper, lo que podría ser una pequeña ventaja.
fuente
Aquí está mi pequeño método de extensión para obtener
UrlHelper
unaHtmlHelper
instancia:Úselo como:
(Estoy publicando este ans solo como referencia)
fuente