У меня есть проект, который использует области 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)] это ищет представление в корне проекта вместо в области определенная папка представления.
Что я пропускаю здесь?
Заранее спасибо.
Если это проблема маршрутизации, вы можете решить ее, зарегистрировав свои региональные маршруты сначала . Это заставляет механизм маршрутизации пытаться сопоставить один из маршрутов области, до , соответствующий корневому маршруту:
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..
.. это образец подкаталогов, которые он будет искать, если думает, что находится в определенной области.
Решено! Пара моих вызовов "RedirectToAction" не указывали имя области явно в параметре коллекции routeobject этого метода. Странно, что это требуется, даже если все перенаправляющие контроллеры находятся в одной области. Кроме того, HtmlActionLinks работают нормально, когда я не указываю новую {area="blah"} в коллекции routeobject, поэтому мне интересно, почему вызовы RedirectToAction() для действий контроллера требуют этого, даже если вызывающий и вызываемый контроллеры находятся в одной области.
Проверьте сгенерированный код по адресу 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 }
);
}