我已经在这个特定问题上苦苦挣扎了一段时间,但我想我终于弄明白了。
文件夹结构和命名空间在项目中的调用方式对于正常工作非常重要!
我在这里有一个带有嵌入式剃须刀视图的便携式区域的工作示例:
https://github.com/fretje/MembershipStarterKit
看一下项目的结构。
区域名称为UserAdministration,项目根目录下有一个UserAdministrationRegistration类,位于UserAdministration命名空间中。
然后是 Controllers、Models 和 Views 文件夹(就像普通的 MVC 项目一样),在 Views 文件夹下,还有一个 UserAdministration 文件夹,其中包含该区域的视图。
还有其他对于嵌入视图的工作非常重要的事情:您必须在global.asax.cs 文件的Application_Start 方法中注册一个新的视图引擎,您这样做了吗?
PortableAreaRegistration.RegisterEmbeddedViewEngine();
并且...在您的注册类中,确保您覆盖了带有 2 个参数(AreaRegistrationContext context 和 IApplicationBus bus)的 RegisterArea 方法,并在其中调用基本实现:
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();
确保您的嵌入式视图和资源已注册。