2009-04-07 26 views
7

Desidero creare un percorso da una classe di utilità che non ha accesso a un ViewContext.Come si costruisce un percorso senza ViewContext in ASP.NET MVC?

È possibile? Non sembra esserci alcun equivalente di ViewContext.Current

Ho provato a pescare in tutti i costruttori per Routing e HttpContext ma non riesco a ottenere quello che voglio.

Questo è quello che sto cercando - anche se questo non funziona perché RouteTable.Routes è di tipo RouteCollection e non RouteData. Così vicino - eppure così lontano :-)

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

Nota: RequestContest è di tipo System.Web.Routing.RequestContext e non HttpContext

risposta

11

Prova questo:

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

Spero che questo aiuti

aggiornamento:

Il precedente non è corretto (l'ho postato dalla mia memoria). Prova a modificare (funziona in uno dei miei progetti):

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

new RouteData() sta usando solo ed esclusivamente per RequestContext inizializzazione e new UrlHelper(requestContext) chiama in realtà new UrlHelper(requestContext, RouteTable.Routes)

+0

Mi ha sorpreso che che funziona realmente. non sono ancora sicuro di quali siano le implicazioni di avere un oggetto RouteData() vuoto. forse usa la rotta corrente come "base" per la nuova rotta? qualcuno sa? –

+0

Ho aggiornato la mia risposta –

+0

eu-ge-ne = ge-ni-us, grazie mille –

Problemi correlati