2009-04-07 18 views
7

Chcę utworzyć trasę z klasy narzędziowej, która nie ma dostępu do obiektu ViewContext.Jak skonstruować trasę bez ViewContext w ASP.NET MVC?

Czy to możliwe? Wydaje się, że nie ma żadnego odpowiednika tej metody. Próbowałem łowić we wszystkich konstruktorach dla Routingu i HttpContext, ale nie mogę dostać się do tego, czego chcę.

Tego właśnie szukam - chociaż to nie działa, ponieważ RouteTable.Routes jest typu RouteCollection, a nie RouteData. Tak blisko - a jednak tak daleko :-)

 RequestContext requestContext = new RequestContext(HttpContext.Current, RouteTable.Routes); 
     UrlHelper url = new UrlHelper(requestContext); 
     var urlString = url.RouteUrl(new {controller="DynamicImage", action="Button", text="Hello World"}); 

Uwaga: RequestContest jest typu System.Web.Routing.RequestContext i nie HttpContext

Odpowiedz

11

Spróbuj tego:

var httpContext = new HttpContextWrapper(HttpContext.Current); 
var requestContext = new RequestContext(httpContext); 
var urlHelper = new UrlHelper(requestContext, new RouteData())); 

Nadzieja to pomaga

AKTUALIZACJA:

Poprzedni nie jest poprawny (opublikowałem go z mojej pamięci). Spróbuj zamiast tego (to działa w jednym z moich projektów):

var httpContext = new HttpContextWrapper(HttpContext.Current); 
var requestContext = new RequestContext(httpContext, new RouteData()); 
var urlHelper = new UrlHelper(requestContext); 

new RouteData() używa właśnie tylko dla RequestContext inicjalizacji i new UrlHelper(requestContext) faktycznie nazywa new UrlHelper(requestContext, RouteTable.Routes)

+0

Byłem zaskoczony, że faktycznie działa. nie jestem jeszcze pewny, jakie są implikacje posiadania pustego obiektu RouteData(). może używa aktualnej trasy jako "bazy" dla nowej trasy? ktoś wie? –

+0

Zaktualizowałem moją odpowiedź –

+0

eu-ge-ne = ge-ni-us, dziękuję bardzo –