2009-04-07 9 views
7

Ich möchte eine Route von einer Dienstprogrammklasse erstellen, die keinen Zugriff auf einen ViewContext hat.Wie konstruiere ich eine Route ohne ViewContext in ASP.NET MVC?

Ist das möglich? Es scheint kein Äquivalent von ViewContext.Current

Ich habe versucht, Angeln in allen Konstruktoren für Routing und HttpContext, aber kann nicht ganz bekommen, was ich will.

Dies ist, was ich suche - obwohl dies nicht funktioniert, weil RouteTable.Routes vom Typ RouteCollection und nicht RouteData ist. So nah - und doch so weit :-)

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

Hinweis: RequestContest ist vom Typ System.Web.Routing.RequestContext und nicht Httpcontext

Antwort

11

Versuchen Sie folgendes:

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

this helps

AKTUALISIERT:

Das vorherige ist nicht korrekt (ich habe es aus meinem Gedächtnis gepostet). Versuchen Sie stattdessen (funktioniert es in einem meiner Projekte):

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

new RouteData() ist mit nur nur für RequestContext Initialisierung und new UrlHelper(requestContext) tatsächlich new UrlHelper(requestContext, RouteTable.Routes) ruft

+0

ich war überrascht, dass das tatsächlich funktioniert. Ich bin mir nur noch nicht sicher, was die Implikationen eines leeren RouteData() - Objekts sind. Vielleicht nutzt es die aktuelle Route als Basis für die neue Route? Weiß jemand? –

+0

Ich habe meine Antwort aktualisiert –

+0

eu-ge-ne = ge-ni-us, vielen Dank –

Verwandte Themen