Meh*_*egi 25 asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4
我想将我的MVC项目分成几个项目
首先,我创建了两个项目Front和Views
该阵线项目是一个Web应用程序,其中包含控制器和模型
本次项目是一个类库项目,将只包含的意见
我的问题是如何在Views项目中创建控制器调用视图
我有像这样的控制器:
public ActionResult Default()
{
return this.View();
}
Run Code Online (Sandbox Code Playgroud)
Moh*_*our 55
对于包含控制器,您需要更改路由注册以告知它们在哪里查找控制器:
routes.MapRoute(name: "Default", url: "{controller}/{action}/{id}",
namespaces: new[] {"[Namespace of the Project that contains your controllers]"},
defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional});
Run Code Online (Sandbox Code Playgroud)
包括查看您创建自定义ViewEngine:
public class CustomViewEngine: RazorViewEngine
{
public CustomViewEngine()
{
MasterLocationFormats = new string[]
{
"~/bin/Views/{1}/{0}.cshtml",
"~/bin/Views/{1}/{0}.vbhtml",
"~/bin/Views/Shared/{0}.cshtml",
"~/bin/Views/Shared/{0}.vbhtml"
};
ViewLocationFormats = new string[]
{
"~/bin/Areas/{2}/Views/{1}/{0}.cshtml",
"~/bin/Areas/{2}/Views/{1}/{0}.vbhtml",
"~/bin/Areas/{2}/Views/Shared/{0}.cshtml",
"~/bin/Areas/{2}/Views/Shared/{0}.vbhtml"
};
.
.
.
}
}
protected void Application_Start()
{
ViewEngines.Engines.Add(new CustomViewEngine());
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看RazorViewEngin的默认实现.
这里有一些好文章:
如何在ASP.NET MVC应用程序中调用外部程序集中的控制器
Eri*_*sch 32
MVC不会将视图编译到DLL中,而是将它们作为文件从站点目录的根目录引用.按照惯例,位置为〜/ Views,并遵循搜索路径.这或多或少硬编码到默认视图引擎中.
因为视图是文件,所以当您将它们分成单独的项目时,它们将不存在于您的主Web应用程序项目中.因此,视图引擎无法找到它们.编译应用程序时,引用的任何项目都只会复制DLL(以及其他一些东西,比如pdb等)
现在,有办法解决这个问题,但说实话,他们通常比他们的价值更麻烦.您可以在mvc contrib项目中查看"可移植区域",但这些并没有得到很好的支持,并且一直在谈论用NuGet包装替换它们.
您也可以按照@ mo.esmp的建议,创建一个自定义视图引擎,但是您仍然需要找到在构建和/或部署时站点可以访问它们的地方复制视图的方法.
我的建议是不要以你描述的方式打破项目.我认为没有任何价值.如果您的项目变得如此之大,我会将您的代码分成几个区域,并将所有区域代码和数据保存在一起.
将明显相互依赖的项目分成单独的程序集是有什么价值的,它们的唯一目的是根据目的收集事物?我认为将模型分离到自己的项目中有一些价值,因为模型可以被多个程序集使用.但是,控制器和视图仅由MVC主站点使用.
您可以预编译视图-这样,它们便会包含在dll中,并且您可以从另一个项目中引用它们。
怎么做:
而已!
尽管您需要对模型做一些事情,要么将它们与视图放在一起,要么为它们创建第三个项目-否则您将具有循环依赖关系。
另一个缺点是,将要使用视图的每个人都需要该Razor Generator扩展。
基本上,这种工作方式是使Visual Studio在设计时从视图生成.cs文件,这些文件是已编译dll的一部分,与任何其他代码相同。
| 归档时间: |
|
| 查看次数: |
29095 次 |
| 最近记录: |