Asp.net mvc 3 与多个Web应用程序共享控制器和视图
我想将我的控制器和视图拆分为单独的类库,以便它们可以在多个ASP.NET MVC 3应用程序中重用。当使用单独的部件时,控制器零件不是问题,但是要让视图引擎定位视图是非常困难的 我最终使用了Asp.net mvc 3 与多个Web应用程序共享控制器和视图,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我想将我的控制器和视图拆分为单独的类库,以便它们可以在多个ASP.NET MVC 3应用程序中重用。当使用单独的部件时,控制器零件不是问题,但是要让视图引擎定位视图是非常困难的 我最终使用了 有没有我错过的更简单的方法?看看mvc contrib的便携区: 它们是专门为此目的制作的。如果你走那条路,你就不需要太多的代码了;-) 为了与MVC3合作,我修改了发布的想法。这是相当快和容易。唯一的小缺点是共享视图需要嵌入资源,因此需要编译 将共享视图(.cshtml、.vbhtml文件)放入库项目中
有没有我错过的更简单的方法?看看mvc contrib的便携区:
它们是专门为此目的制作的。如果你走那条路,你就不需要太多的代码了;-) 为了与MVC3合作,我修改了发布的想法。这是相当快和容易。唯一的小缺点是共享视图需要嵌入资源,因此需要编译
- 将共享视图(.cshtml、.vbhtml文件)放入库项目中。(我在这个项目中也有一些共享控制器。)如果您想从应用程序中使用_Layout.cshtml,请确保在共享视图中包含指向它的_ViewStart.cshtml
- 在库项目中,将所有视图的生成操作属性设置为Embedded Resource
- 在库项目中添加以下代码,将视图的内容写入tmp/views目录
只是对Carson Herrick的优秀帖子的一些补充
System.Runtime.Remoting
)Utils.SaveStreamToFile
需要更改为->
System.Runtime.Remoting.MetadataServices.MetaData.SaveStreamToFile(resStream, rootPath + fileName + "." + extension);
WebViewPage
或WebViewPage
派生。答案如下:我看过洛杉矶技术人员的帖子。我相信这对人们来说很有效,但对于我所需要的东西来说,这完全是过火了。总线和其他配置的消息传递对我来说似乎很繁重。Razor视图编译是视图的一个属性设置(尽管在每个视图上都是如此)。在我的例子中,resStream为null。ReflectionPermissions()可能存在一些问题。有人有同样的问题吗?这确实有效。迄今为止最简单的解决方案。道具!
public static void RegisterCustomViewEngines(ViewEngineCollection viewEngines)
{
//viewEngines.Clear(); //This seemed like a bad idea to me.
viewEngines.Add(new EmbeddedResourceViewEngine());
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
RegisterCustomViewEngines(ViewEngines.Engines);
}
System.Runtime.Remoting.MetadataServices.MetaData.SaveStreamToFile(resStream, rootPath + fileName + "." + extension);