Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 与多个Web应用程序共享控制器和视图_Asp.net Mvc 3_Razor - Fatal编程技术网

Asp.net mvc 3 与多个Web应用程序共享控制器和视图

Asp.net mvc 3 与多个Web应用程序共享控制器和视图,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我想将我的控制器和视图拆分为单独的类库,以便它们可以在多个ASP.NET MVC 3应用程序中重用。当使用单独的部件时,控制器零件不是问题,但是要让视图引擎定位视图是非常困难的 我最终使用了 有没有我错过的更简单的方法?看看mvc contrib的便携区: 它们是专门为此目的制作的。如果你走那条路,你就不需要太多的代码了;-) 为了与MVC3合作,我修改了发布的想法。这是相当快和容易。唯一的小缺点是共享视图需要嵌入资源,因此需要编译 将共享视图(.cshtml、.vbhtml文件)放入库项目中

我想将我的控制器和视图拆分为单独的类库,以便它们可以在多个ASP.NET MVC 3应用程序中重用。当使用单独的部件时,控制器零件不是问题,但是要让视图引擎定位视图是非常困难的

我最终使用了


有没有我错过的更简单的方法?

看看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);