Muszę wygenerować adresy URL w modelu w ASP.NET MVC. Chciałbym wywołać coś takiego jak UrlHelper.Action (), który używa tras do wygenerowania adresu URL. Nie mam nic przeciwko wypełnianiu zwykłych spacji, takich jak nazwa hosta, schemat i tak dalej.
Czy jest jakaś metoda, której mogę użyć? Czy istnieje sposób na utworzenie UrlHelper?
asp.net-mvc
urlhelper
pupeno
źródło
źródło
Odpowiedzi:
Przydatna wskazówka: w dowolnej aplikacji ASP.NET można uzyskać odwołanie do bieżącego HttpContext
który pochodzi z System.Web. W związku z tym następujące będą działać w dowolnym miejscu w aplikacji ASP.NET MVC:
Przykład:
Wywołanie
Link
właściwości w utworzonym obiekcie MyModel zwróci prawidłowy adres URL, aby wyświetlić model na podstawie routingu w Global.asaxźródło
using
dla obuSystem.Web
iSystem.Web.Mvc
Podoba mi się odpowiedź Omara, ale to nie działa na mnie. Tak dla przypomnienia, oto rozwiązanie, którego teraz używam:
źródło
UrlHelper można skonstruować z poziomu akcji kontrolera z następującymi elementami:
Poza kontrolerem można skonstruować UrlHelper, tworząc RequestContext z RouteTable.Routes RouteData.
(Na podstawie odpowiedzi Briana, z dodaną niewielką poprawką kodu).
źródło
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
this.ControllerContext.RequestContext
jest aHttpRequestContext
, a konstruktorUrlHelper
oczekuje aRequestContext
. Obie klasy nie są ze sobą powiązane.Tak, możesz go utworzyć. Możesz zrobić coś takiego:
RouteTable.Routes
jest właściwością statyczną, więc powinno być OK; aby uzyskaćHttpContextBase
odniesienie,HttpContextWrapper
bierze jeHttpContext
iHttpContext
dostarcza.źródło
Po wypróbowaniu wszystkich innych odpowiedzi skończyłem
Hejterzy będą nienawidzić ¯ \ _ (ツ) _ / ¯
źródło
Próbowałem zrobić coś podobnego z poziomu strony (poza kontrolerem).
UrlHelper nie pozwolił mi zbudować go tak łatwo, jak odpowiedź Pablosa, ale potem przypomniałem sobie stary trik, aby skutecznie zrobić to samo:
źródło
Myślę, że szukasz tego:
źródło