2011-05-26 14 views
6

necesito utilizar System.Web.Routing.RequestContext en un modelo de vista con el fin de llamar HtmlHelper.GenerateLink().Acceso System.Web.Routing.RequestContext de contexto estático en MVC 2,0

En MVC 1.0 fue posible obtener el contexto estáticamente echando la corriente IHttpHandler:

var context = ((MvcHandler) HttpContext.Current.CurrentHandler).RequestContext; 

Ahora el proyecto se ha actualizado a MVC 2.0 y esta excepción se produce en el reparto:

No se puede convertir el objeto del tipo 'ServerExecuteHttpHandlerWrapper' para escribir 'System.Web.Mvc.MvcHandler'.

no estoy seguro de si es pertinente, pero este se ejecuta en .NET 4.0 en IIS6.

Respuesta

11

No sé lo que quiere hacer con el System.Web.Routing.RequestContext? echa un vistazo a:

var context = new HttpContextWrapper(System.Web.HttpContext.Current); 
var routeData = RouteTable.Routes.GetRouteData(context); 

// Use RouteData directly: 
var controller = routeData.Values["controller"]; 

// Or with via your RequestContext: 
var requestContext = new RequestContext(context, routeData); 
controller = requestContext.RouteData.Values["controller"] 
+1

Gracias Ben: aceptando esta porque responde directamente mi pregunta, pero sugiero que cualquier futuro lector tome nota de la respuesta de Darin. –

+0

Buen trabajo @benwasd! –

16

Necesito usar System.Web.Routing.RequestContext en un modelo de vista para llamar a HtmlHelper.GenerateLink().

Aunque en teoría se podría escribir:

var rc = HttpContext.Current.Request.RequestContext; 

en la práctica se debe por ningún motivo debe hacer algo como esto en un modelo de vista. Eso es lo que se supone ayudantes HTML para hacer:

public static MvcHtmlString GenerateMyLink<MyViewModel>(this HtmlHelper<MyViewModel> html) 
{ 
    MyViewModel model = html.ViewData.Model; 
    RequestContext rc = html.ViewContext.RequestContext; 
    //TODO: use your view model and the HttpContext to generate whatever link is needed 
    ... 
} 

y en su establecimiento inflexible a la vista MyViewModel simplemente:

<%= Html.GenerateMyLink() %> 
+0

Gracias Darin -esto es yo tratando de pato refactorización de código legado :) –

+0

@ David Neale, ASP.NET MVC 1.0 ya se considera el código heredado? LOL. Me gusta. –

+2

¡Todo lo que se escribió antes de comenzar un trabajo me lo heredaron! : D –

Cuestiones relacionadas