Zwykle w widoku ASP.NET można użyć następującej funkcji, aby uzyskać adres URL (nie <a>
):
Url.Action("Action", "Controller");
Jednak nie mogę znaleźć, jak to zrobić z niestandardowego pomocnika HTML. mam
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
}
}
Zmienna pomocnicza ma metody Action i GenerateLink, ale generują one <a>
. Poszperałem trochę w kodzie źródłowym ASP.NET MVC, ale nie mogłem znaleźć prostego sposobu.
Problem polega na tym, że powyższy adres URL jest członkiem klasy widoku i do swojej instancji potrzebuje pewnych kontekstów i map tras (z którymi nie chcę się zajmować i nie powinienem). Alternatywnie, instancja klasy HtmlHelper ma również pewien kontekst, który, jak sądzę, jest albo kolacją podzbioru informacji kontekstowych instancji Url (ale znowu nie chcę się tym zajmować).
Podsumowując, myślę, że jest to możliwe, ale ponieważ wszystkie sposoby, które widziałem, obejmują manipulację mniej lub bardziej wewnętrznymi elementami ASP.NET, zastanawiam się, czy jest lepszy sposób.
Edycja: Na przykład widzę jedną możliwość:
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
urlHelper.Action("Action", "Controller");
}
}
Ale to nie wydaje się właściwe. Nie chcę sam mieć do czynienia z wystąpieniami UrlHelper. Musi być łatwiejszy sposób.
źródło
Odpowiedzi:
Możesz utworzyć pomocnika adresu URL w ten sposób wewnątrz metody rozszerzenia pomocnika html:
źródło
new UrlHelper(htmlHelper.ViewContext.RequestContext, htmlHelper.RouteCollection)
Możesz również uzyskać linki za pomocą
UrlHelper
klasy publicznej i statycznej:W tym przykładzie nie musisz tworzyć nowej klasy UrlHelper, co może być małą zaletą.
źródło
Oto mój malutki metoda extenstion uzyskania
UrlHelper
zHtmlHelper
instancji:Użyj go jako:
(Publikuję to i tylko w celach informacyjnych)
źródło