Ответ 1
Я какое-то время боролся с этой конкретной проблемой, но, думаю, я, наконец, понял это.
Структура папок и то, как пространства имен вызываются внутри вашего проекта, очень важны для правильной работы!
У меня есть рабочий пример портативной области со встроенными представлениями бритвы здесь:
Взгляните на структуру проекта.
Название области 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();
Чтобы убедиться, что ваши встроенные просмотры и ресурсы зарегистрированы.