Доступ к System.Web.Routing.RequestContext из статического контекста в MVC 2.0 - PullRequest
6 голосов
/ 26 мая 2011

Мне нужно использовать System.Web.Routing.RequestContext в модели представления для вызова HtmlHelper.GenerateLink().

В MVC 1.0 можно было статически получить контекст путем приведения текущего IHttpHandler:

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

Теперь проект был обновлен до MVC 2.0, и это исключение выдается при приведении:

Невозможно привести объект типа 'ServerExecuteHttpHandlerWrapper' к типу 'System.Web.Mvc.MvcHandler '.

Я не уверен, что это актуально, но он запускается в .NET 4.0 на IIS6.

Ответы [ 2 ]

16 голосов
/ 26 мая 2011

Мне нужно использовать System.Web.Routing.RequestContext в модели представления для вызова HtmlHelper.GenerateLink ().

Хотя в теории вы могли бы написать:

var rc = HttpContext.Current.Request.RequestContext;

на практике вы никогда не должны делать что-то подобное в модели представления.Вот что должны делать помощники HTML:

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
    ...
}

, а в вашем строго типизированном представлении MyViewModel просто:

<%= Html.GenerateMyLink() %>
11 голосов
/ 26 мая 2011

Я не знаю, что вы хотите сделать с System.Web.Routing.RequestContext? проверить:

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"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...