Маршрут MVC3 по умолчанию в область не ищет вид внутри области - PullRequest
4 голосов
/ 15 декабря 2011

Я установил объект маршрута по умолчанию для контроллера («Beheer») внутри области (также называемой «Beheer»).

Как это:

routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Beheer", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

Он может найти этот контроллер и действие в пределах зоны действия, но он не может найти вид, потому что он смотрит только в следующих местах:

~/Views/Beheer/Index.aspx
~/Views/Beheer/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Views/Beheer/Index.cshtml
~/Views/Beheer/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml 

Пока надо искать в этом месте:

~/Beheer/Views/Beheer/Index.aspx

Как я могу заставить его искать там представление?

Я уже пробовал:

routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { area = "Beheer", controller = "Beheer", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

И я попробовал это (с пространствами имен):

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Beheer", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
        new[] { "Areas.Beheer" }
    );

Но ничего не меняется. Он вводит правильное действие в правильный контроллер, но не может найти представление.

Ответы [ 2 ]

2 голосов
/ 15 декабря 2011

Вы должны добавить свой маршрут в зону регистрации. BeheerAreaRegistration имеет свойство, которое устанавливает имя области.

 
    public class BeheerAreaRegistration : AreaRegistration
    {
       public override string AreaName
       {
         get
         {
           return "Beheer";
         }
        }

    public override void RegisterArea(AreaRegistrationContext context)
    {
       context.MapRoute( "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Beheer", action = "Index", id = UrlParameter.Optional } // Parameter defaults);
    }
0 голосов
/ 15 декабря 2011

У меня была эта проблема, и я обнаружил, что мне нужно полностью определить пространства имен, и у меня есть проблемы с поиском правильного представления, пока я не уничтожу процесс IIS, некое странное кэширование или что-то еще.

new[] { "Areas.Beheer" }

может стать

new[] {"myApp.Areas.Beheer.Controllers"}

Может быть, ваша проблема похожа на мою, а может и нет.

...