用子目录组织MVC2视图

问题描述

| 我们有一个相当大的MVC项目,其中包含大量视图和部分视图(显示/编辑器模板)。我们的UI中几乎有95%位于模板中,我们的
aspx
视图只是占位符,称为我们的
ascx
模板。因此,每当我们在VS2010中打开
Views
文件夹时,向下滚动到
Shared
文件夹来管理模板都是相当痛苦的。 我们希望稍微更改一下此层次结构。我们不想在
Views
下为每个控制器都提供一个文件夹,而是希望在
Views
下有一个名为
Pages
文件夹,并在这里将每个控制器的文件夹都包含在其中。这样,当我们打开
Views
时,就有2个文件夹:
Pages
Shared
。 是否可以轻松地做到这一点,而无需返回并编辑我们的每个控制器,它们只是从ѭ10simply到
return View(\"Pages/MyControllerName/MyActionHandler\");
?我希望控制器仍简单地为10英镑,而我的网址不会更改。因此,换句话说,我只想将我的视图的根目录移到视图/页面中,而不是模板—它们保持原样。 我们采用的解决方案: 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件东西: 页数 共享 web.config 因为我们在
Shared
displayTemplates
EditorTemplates
中完成了95%的UI工作,所以这消除了大多数可忽略的东西,使它们始终不露面地成为开发人员。尽管建议的答案是做
ViewEngines.Engines.Clear();
,然后添加一个新实例化的答案,但我们仍然无法解决MVC在新版本上的表现不错的问题。因此,我们选择更改功能实例和已经实例化的实例。我不喜欢这种转换,我们将围绕它改进一些代码,但这是使任何也想要这样做的人入门的功能代码。     

解决方法

        您需要注册一个
ViewLocationFormats
属性的ViewEngine,以包括您的新位置。