【问题标题】:Organizing MVC2 Views with a subdirectory使用子目录组织 MVC2 视图
【发布时间】:2011-06-14 15:15:26
【问题描述】:

我们有一个相当大的 MVC 项目,其中包含大量视图和部分视图(显示/编辑器模板)。几乎 95% 的 UI 都在我们的模板中,我们的 aspx 视图只是调用我们的 ascx 模板的占位符。因此,每当我们在 VS2010 中打开 Views 文件夹时,向下滚动到 Shared 文件夹来管理我们的模板是相当痛苦的。

我们想稍微改变一下这个层次结构。我们希望在Views 下有一个名为Pages 的文件夹,而不是在Views 下为每个控制器创建一个文件夹,并将每个控制器的文件夹放在此处。这样,当我们打开 Views 时,我们有 2 个文件夹:PagesShared

这是否很容易实现,无需返回并编辑我们的每个控制器,它们只是 return View();return View("Pages/MyControllerName/MyActionHandler");?我希望控制器仍然只是 return View(); 并且我的 URL 没有改变。所以换句话说,我只想将我的视图的根目录移动到视图/页面中,而不是模板 - 它们保持原样。


我们采用的解决方案:

global.asax.cs:(将这些添加为 Application_Start() 的前 2 行 - 不做其他更改)

        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 个东西:

  1. 页数
  2. 共享
  3. web.config

由于我们 95% 的 UI 工作是在 Shared DisplayTemplatesEditorTemplates 中完成的,这使得作为开发人员的大部分时间都可以忽略不计。虽然建议的答案是执行ViewEngines.Engines.Clear();,然后添加一个新实例化的,但我们遇到了 MVC 与新实例配合得很好的问题。所以我们选择改变功能和已经实例化的实例。我不喜欢演员表,我们会在这方面添加一些代码以使其更好,但这是让任何想要这样做的人开始的功能代码。

【问题讨论】:

  • 只是让你知道。您可以将特定于控制器的模板放在 EditorTemplates 或 DisplayTemplates 子文件夹中,而不是将所有内容放在 Shared 文件夹中。示例:/Views/[ControllerName]/EditorTemplates
  • 嗯,很高兴知道!不确定我们是否希望以这种方式组织它们,因为我们将 ASPX 文件与 UI 导航层次结构一起组织,但我们沿着实体模型组织结构组织我们的 ASCX 文件,并且两者甚至不接近。然而,这是一个我不知道的好技巧!

标签: c# asp.net-mvc visual-studio-2010 asp.net-mvc-2


【解决方案1】:

您需要使用 ViewLocationFormats 属性集注册一个 ViewEngine 以包含您的新位置。

【讨论】:

  • 我可以重新注册默认的 ViewEngine 吗?我们没有使用 Razor,我们使用的是默认的。对不起,这对我来说有点新。
  • ViewEngines.Engines 中删除WebFormsViewEngine,然后添加一个新实例。
  • 看不到 ViewPaths 属性或任何明显的替代方案。 ViewEngines.Engines.Clear(); var engine = new WebFormViewEngine(); engine.XXXXXXX????; ViewEngines.Engines.Add(engine); 另外,我显然无法成为 Google 用户。 :-/
  • 哦,等等,我想这是我想要的 ViewLocationFormats?
  • {0} 是视图名称; {1} 是控制器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 2015-12-11
  • 2013-10-04
  • 2016-09-18
相关资源
最近更新 更多