Я некоторое время боролся с этой конкретной проблемой, но, думаю, наконец-то понял.
Структура папок и то, как пространства имен вызываются внутри вашего проекта, очень важны для правильной работы!
У меня есть рабочий пример Portable Area со встроенными видами бритвы здесь:
https://github.com/fretje/MembershipStarterKit
Взгляните на структуру проекта.
Имя области - UserAdministration
, и в корневом каталоге проекта есть класс UserAdministrationRegistration
, который находится в пространстве имен UserAdministration
.Тогда есть папка Controllers
, Models
и Views
(как обычный проект MVC), а под папкой Views
есть папка UserAdministration
, которая содержит представления для области.
Также еще кое-что, что очень важно для работы встроенных представлений: вам нужно зарегистрировать новый движок представлений в методе Application_Start
вашего global.asax.cs
файла, вы это сделали?
PortableAreaRegistration.RegisterEmbeddedViewEngine();
И ... В своем классе регистрации убедитесь, что вы переопределяете метод RegisterArea
, который принимает 2 параметра (AreaRegistrationContext context
и IApplicationBus bus
), и вызываете базовую реализацию там:
public override void RegisterArea(AreaRegistrationContext context,
IApplicationBus bus)
{
base.RegisterArea(context, bus); // <== very important!
context.MapRoute(
"UserAdministration",
AreaName + "/{controller}/{action}/{id}",
new { controller = "UserAdministration", action = "Index",
id = UrlParameter.Optional }
);
}
Если вы не вызываете базовую реализацию, вам нужно как минимум добавить
RegisterAreaEmbeddedResources();
, чтобы убедиться, что ваши встроенные представления и ресурсы зарегистрированы.