Области MVC - Представление, не найденное

У меня есть проект, который использует области MVC. Область имеет весь проект в ней, в то время как основные папки "Views/Controllers/Models" вне областей являются пустым запретом контроллера отправки, у меня есть установка, которая направляет входящие запросы по умолчанию к Домашнему Контроллеру в моей области.

Этот контроллер имеет один метод следующим образом:-

public ActionResult Index(string id)
    {
        return RedirectToAction("Index", "Home", new {area = "xyz"});
    }   

У меня также есть установка маршрута по умолчанию для использования этого контроллера следующим образом:-

routes.MapRoute(
            "Default",                                              // Default route
            "{controller}/{action}/{id}",
            new { controller = "Dispatch", action = "Index", id = UrlParameter.Optional }
        );   

Любые запросы значения по умолчанию на мой сайт соответственно направляются к соответствующей области. Метод области "RegisterArea" имеет одиночный маршрут:-

context.MapRoute(
            "xyz_default",
            "xyz/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }

Моя область имеет несколько контроллеров с большим количеством представлений. Любой вызов к определенному представлению в этих методах контроллера как "Представление возврата ("вздор"); представляет корректное представление. Однако каждый раз, когда я пытаюсь возвратиться, представление наряду с объектом модели передало в в качестве параметра, я получаю следующую ошибку:-

Server Error in '/DeveloperPortal' Application.
The view 'blah' or its master was not found. The following locations were searched:
~/Views/Profile/blah.aspx
~/Views/Profile/blah.ascx
~/Views/Shared/blah.aspx
~/Views/Shared/blah.ascx 

Это похоже каждый раз, когда объект модели передается в как параметрический усилитель. к "Представлению ()" метод [например, Представлению возврата ("вздор", obj)] это ищет представление в корне проекта вместо в области определенная папка представления.

Что я пропускаю здесь?

Заранее спасибо.

14
задан user314827 12 April 2010 в 18:57
поделиться

3 ответа

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

AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);

Если я вызываю ошибку, переименовав одну из папок моих представлений в моем приложении областей, я получаю другое ошибка, чем у вас:

The view 'Index' or its master was not found. The following locations 
  were searched:

~/Areas/xyz/Views/Document/Index.aspx
~/Areas/xyz/Views/Document/Index.ascx
~/Areas/xyz/Views/Shared/Index.aspx
~/Areas/xyz/Views/Shared/Index.ascx

...and then the usual root view folders.. 

.. это образец подкаталогов, которые он будет искать, если думает, что находится в определенной области.

3
ответ дан 1 December 2019 в 10:02
поделиться

Решено! Пара моих вызовов "RedirectToAction" не указывали имя области явно в параметре коллекции routeobject этого метода. Странно, что это требуется, даже если все перенаправляющие контроллеры находятся в одной области. Кроме того, HtmlActionLinks работают нормально, когда я не указываю новую {area="blah"} в коллекции routeobject, поэтому мне интересно, почему вызовы RedirectToAction() для действий контроллера требуют этого, даже если вызывающий и вызываемый контроллеры находятся в одной области.

8
ответ дан 1 December 2019 в 10:02
поделиться

Проверьте сгенерированный код по адресу MyAreaAreaRegistration.cs и убедитесь, что параметр controller установлен на ваш контроллер по умолчанию, иначе контроллер будет вызван bot по какой-то причине ASP.NET MVC не будет искать представления в папке area

public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "SomeArea_default",
            "SomeArea/{controller}/{action}/{id}",
            new { controller = "SomeController", action = "Index", id = UrlParameter.Optional }
        );
    }
2
ответ дан 1 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: