我在这个问题上一直挣扎了一段时间,但我认为我终于找到了解决方法。
对于这个问题,文件夹结构以及项目内命名空间的调用非常重要!
我在这里有一个嵌入Razor视图的可移植区域的工作示例:
https://github.com/fretje/MembershipStarterKit
请看项目的结构。
该区域的名称是UserAdministration
,在项目根目录中有一个UserAdministrationRegistration
类,它位于UserAdministration
命名空间中。
然后还有一个Controllers
、Models
和Views
文件夹(就像一个普通的MVC项目一样),在Views
文件夹下面,又有一个UserAdministration
文件夹,其中包含该区域的视图。
还有一件非常重要的事情,让嵌入式视图起作用:你必须在你的global.asax.cs
文件的Application_Start
方法中注册一个新的视图引擎,你做到了吗?
PortableAreaRegistration.RegisterEmbeddedViewEngine();
并且...在你的注册类中,确保覆盖RegisterArea
方法,该方法接受两个参数(AreaRegistrationContext context
和IApplicationBus bus
),并在其中调用基本实现:
public override void RegisterArea(AreaRegistrationContext context,
IApplicationBus bus)
{
base.RegisterArea(context, bus);
context.MapRoute(
"UserAdministration",
AreaName + "/{controller}/{action}/{id}",
new { controller = "UserAdministration", action = "Index",
id = UrlParameter.Optional }
);
}
如果你不调用基础实现,至少要添加一个
。
RegisterAreaEmbeddedResources();
为确保您的嵌入式视图和资源已注册。