我们有一个相当大的MVC项目,包含大量视图和部分视图(显示/编辑器模板)。我们的模板中有95%的用户界面,我们的aspx
视图只是调用我们的ascx
模板的占位符。因此,每当我们在VS2010中打开Views
文件夹时,向下滚动到Shared
文件夹以便我们管理模板是非常痛苦的。
我们想要稍微改变这种层次结构。我们不想在Views
下为每个控制器设置一个文件夹,而是希望在Pages
下有一个名为Views
的文件夹,并在此处设置我们的每个控制器文件夹。这样,当我们打开Views
时,我们有2个文件夹:Pages
和Shared
。
这是否可以轻松实现,而无需返回并编辑我们只需return View();
到return View("Pages/MyControllerName/MyActionHandler");
的每个控制器?我希望控制器仍然只是return View();
而且我的网址没有变化。换句话说,我只想将我的视图的根目录移动到视图/页面中,而不是模板 - 它们保持不变。
我们采用的解决方案:
global.asax.cs:(将这些添加为Application_Start()
的前两行 - 不做其他更改)
var locations = ((WebFormViewEngine)ViewEngines.Engines.First()).ViewLocationFormats.ToList().Select(x => x.ToLower().Replace("views/{", "Views/Pages/{"));
((WebFormViewEngine) ViewEngines.Engines.First()).ViewLocationFormats = locations.ToArray();
这允许我们的Views
文件夹中包含3个内容:
由于我们在Shared
DisplayTemplates
和EditorTemplates
内完成了95%的用户界面工作,因此这一点可以让所有人都不知所措。 。虽然建议的答案是ViewEngines.Engines.Clear();
然后添加一个新实例化的答案,但我们遇到的问题是MVC与新的一起玩得很好。所以我们选择改变功能和已经实例化的实例。我不喜欢这个转换,我们会在它周围添加一些代码以便更好,但这是让任何人开始的功能代码,也希望这样做。
答案 0 :(得分:2)
您需要注册一个ViewEngine,并设置ViewLocationFormats
属性以包含新位置。