При использовании Url.RouteUrl область отсутствует - PullRequest
0 голосов
/ 02 февраля 2012

Я подозреваю, что я делаю это неправильно.

По разным причинам мое приложение вынуждает пользователя делать выбор сразу после входа в систему.Чтобы гарантировать, что они вводят необходимые данные, я переопределяю метод OnActionExecuting в базовом классе контроллера, чтобы перехватить любую попытку выполнить действие до того, как эти данные были введены, и перенаправить пользователя на нужную страницу.Я сохраняю URL действия, которое они пытались выполнить, со следующим кодом:

url = Url.RouteUrl("Default", filterContext.RouteData.Values);

(filterContext - это объект ActionExecutingContext и параметр OnActionExecuting.)

Проблема I 'у меня есть то, что, если действие было связано с контроллером в области, URL, который я получаю, не отражает область.

Из других сообщений я понимаю, что я могу получить название области из коллекции DataTokens RouteData.Но я не уверен, как лучше это пройти.Я полагаю, я мог бы извлечь его и использовать метод RouteValueDictionary.Add, чтобы добавить его в RouteData.Values ​​(при условии, что в этот момент Values ​​недоступен только для чтения; я не знаю), но это выглядит немного ... странно, какпочему-то упущено.

Это действительно так, как это должно быть сделано?Что-то не так в другом месте, что Area отсутствует в моих RouteData.Values?

1 Ответ

2 голосов
/ 02 февраля 2012

Я бы просто вынул его из токенов данных в фильтре и добавил к значениям маршрута. Вы можете сделать это с RouteValues.Add:

if (filterContext.RouteData.DataTokens.ContainsKey("area"))
    filterContext.RouteData.Values.Add("area", 
        filterContext.RouteData.DataTokens["area"]);

Функция областей была добавлена ​​в MVC2, и я полагаю, что это побочный эффект ее отсутствия в MVC1. Однако, пока ваши RouteValues ​​содержат ключ "area", UrlHelper.RouteUrl должен генерировать правильный URL-адрес для области.

...