2009-04-07 12 views
7

Je souhaite créer une route à partir d'une classe d'utilitaire qui n'a pas accès à un ViewContext.Comment construire une route sans ViewContext dans ASP.NET MVC?

Est-ce possible? Il ne semble pas être l'équivalent de ViewContext.Current

J'ai essayé de pêcher dans tous les constructeurs pour Routing et HttpContext mais je n'arrive pas à obtenir ce que je veux.

C'est ce que je cherche - bien que cela ne fonctionne pas car RouteTable.Routes est de type RouteCollection et non RouteData. Si près - si loin :-)

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

Note: RequestContest est de type System.Web.Routing.RequestContext et non HttpContext

Répondre

11

Essayez ceci:

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

Hope this helps

mise à jour:

Le précédent n'est pas correct (je l'ai posté de ma mémoire). Essayez plutôt (cela fonctionne dans un de mes projets):

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

new RouteData() est en utilisant seulement que pour l'initialisation et RequestContextnew UrlHelper(requestContext) appelle en fait new UrlHelper(requestContext, RouteTable.Routes)

+0

j'ai été surpris que cela fonctionne réellement. Je ne suis pas encore sûr des implications d'avoir un objet RouteData() vide. peut-être utilise-t-il la route actuelle comme «base» pour la nouvelle route? Quelqu'un sait? –

+0

J'ai mis à jour ma réponse –

+0

eu-ge-ne = ge-ni-nous, merci beaucoup –

Questions connexes