2009-04-07 19 views
7

Quiero crear una ruta desde una clase de utilidad que no tenga acceso a ViewContext.¿Cómo construyo una ruta sin ViewContext en ASP.NET MVC?

¿Esto es posible? No parece haber ningún equivalente de ViewContext.Current

He intentado buscar en todos los constructores de Ruteo y HttpContext pero no puedo llegar a lo que quiero.

Esto es lo que estoy buscando, aunque esto no funciona porque RouteTable.Routes es del tipo RouteCollection y no RouteData. Tan cerca - sin embargo tan lejos :-)

 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 es de tipo System.Web.Routing.RequestContext y no HttpContext

Respuesta

11

Prueba esto:

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

Esperanza esto ayuda

Actualizado:

Lo anterior no es correcto (lo publiqué de mi memoria). Tal vez puedas probar (que funciona en uno de mis proyectos):

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

new RouteData() está utilizando apenas solamente para la inicialización y RequestContextnew UrlHelper(requestContext) llamadas realidad new UrlHelper(requestContext, RouteTable.Routes)

+0

Me sorprendió que que realmente funciona. Todavía no estoy seguro de cuáles son las implicaciones de tener un objeto RouteData() vacío. tal vez usa la ruta actual como una 'base' para la nueva ruta? ¿nadie sabe? –

+0

He actualizado mi respuesta –

+0

eu-ge-ne = ge-ni-us, muchas gracias –

Cuestiones relacionadas