Не удалось найти представление области в ASP.Net MVC 5

Новый проект не может найти представления для новой области.

Он пытается найти его в родительской папке Views.

Предлагаемое решение — поместить .DataTokens.Add("area", "AREANAME") в метод RegisterArea.

public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.MapRoute(
                "Test_default",
                "Test/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            ).DataTokens.Add("area", "Test");
        }

Однако при этом я получаю сообщение об ошибке "Элемент с таким же ключом уже добавлен".

ОБНОВЛЕНИЕ 1: я ничего не делаю на контроллере.

public ActionResult Index()
        {
            return View();
        }

ОБНОВЛЕНИЕ 2: я просто хотел бы добавить, что я также регистрирую компоненты в контейнере Unity. Я не думаю, что это вызывает проблемы, потому что в нем прямо указано, что нет необходимости регистрировать мои контроллеры.


person Jonas Arcangel    schedule 17.05.2014    source источник
comment
Покажите нам действие вашего контроллера.   -  person Erik Funkenbusch    schedule 18.05.2014
comment
Я обновил выше, чтобы показать, что в моем контроллере нет ничего особенного.   -  person Jonas Arcangel    schedule 21.05.2014


Ответы (3)


Скорее всего, это потому, что View ищется из пространства имен.

YourNamespace.YourApplication.Controllers 

и вместо этого его следует искать из пространства имен (или любого другого пространства имен, которое вы определили)

YourNamespace.YourApplication.Areas.Test.Controllers

Добавьте следующее в объявление маршрута

public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
        "Test_default",
        "Test/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional },
        namespaces: new[] { "YourNamespace.YourApplication.Areas.Test.Controllers" }
    );
}
person Janne Matikainen    schedule 22.05.2014

Метод Register Area уже знает, что вы находитесь в своей области под названием Test. Использование функции DataTokens.Add("area", "Test") объявляет второй раз ваш маршрут. Вот почему вы получаете эту ошибку.

Первоначальная проблема для вашего представления, безусловно, не связана с вашими настройками маршрутизации. Есть ли пользовательский код при рендеринге представления из контроллера?

person Jämes    schedule 17.05.2014

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

person user3036342    schedule 22.05.2014
comment
Объявление маршрута для областей вызывается из AreaRegistration, которая вызывается перед RouteConfig в моем файле global.asax.cs. - person Jonas Arcangel; 22.05.2014