ASP.NET MVC 3 области - не удается найти представление с пользовательским маршрутом - PullRequest
4 голосов
/ 24 января 2012

У меня есть собственный маршрут в области:

context.Routes.Add(
                "SearchIndex - By Location - USA",
                new CountryTypeSpecificRoute(
                    CountryType.UnitedStates,
                    "search/{locationType}-in-{query}",
                    new { controller = "Search", action = "Index", query = UrlParameter.Optional },
                    new { locationType = new UsaLocationSearchRouteConstraint() })
            );

Пример URL:

/ поиск / районы-в-Нью-Йорк-сити

Хорошо разрешает действие. Но он не может найти вид.

Представление 'Index' или его мастер не найдены или нет движка представления поддерживает поиск мест. Следующие места были искали: ~ / Просмотры / Поиск / Index.cshtml ~ / Просмотров / Shared / Index.cshtml

Представление находится в ~ / Области / Поиск / Представления / Поиск / Index.cshtml

Почему это не выглядело там?

Если я сделаю context.MapRoute вместо context.Routes.Add, это сработает. Похоже, это связано с тем, что я использую собственный маршрут?

Есть идеи?

1 Ответ

5 голосов
/ 24 января 2012

Решено благодаря этому ответу

Я заставил свой собственный маршрут реализовать IRouteWithArea (принять его в ctor) и соответственно обновить свою регистрацию:

context.Routes.Add(
                "SearchIndex - By Location - USA",
                new CountryTypeSpecificRoute(
                    CountryType.UnitedStates,
                    "search/{locationType}-in-{query}",
                    new { controller = "Search", action = "Index", query = UrlParameter.Optional },
                    new { locationType = new UsaLocationSearchRouteConstraint() },
                    "Search")
            );

Обратите внимание на последний параметр «Поиск» - для названия области.

Не знаю, как это работает, но это так. Угадайте, внутренний механизм маршрутизации ищет маршруты, которые реализуют IRouteWithArea.

Проблема решена!

...