我正在尝试使用ASP.NET MVC 3和剃刀视图的便携式视图,因为这似乎是创建一个简单的插件架构的最佳方式。所以我有我的类库设置,我的视图位于/Views/Admin/Index.cshtml,它被设置为嵌入式资源。然后,我将该项目作为主要Web应用程序项目的依赖项。当我尝试访问管理控制器时,索引操作我收到一个无法找到该视图文件的消息(因此控件正确包含在内)。我假设它正在尝试查看主要的Web应用程序项目,而不是便携式区域的二进制文件。有没有办法让剃刀的意见与便携式区域一起工作?
解决方法
我在这个问题上一直在努力一段时间,但我想我终于明白了。
文件夹结构以及命名空间在项目中的名称空间是非常重要的,以便正常工作!
我在这里有一个带有嵌入式剃须刀的便携式区域的工作示例:
07000
看看项目的结构。
该区域的名称是UserAdministration,在项目根目录中有一个UserAdministrationRegistration类,该类位于UserAdministration命名空间中。
然后有一个Controllers,Models和Views文件夹(就像一个普通的MVC项目),在Views文件夹下,还有一个UserAdministration文件夹,其中包含该区域的视图。
还有一些其他对于嵌入式视图工作非常重要的事情:您必须在global.asax.cs文件的Application_Start方法中注册新的视图引擎,是否这样做?
PortableAreaRegistration.RegisterEmbeddedViewEngine();
而在你的注册类中,请确保您覆盖了需要2个参数(AreaRegistrationContext context和IApplicationBus总线)的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();
以确保您嵌入的视图和资源已注册。