【问题标题】:What is the best way to organise Partial Views in a file structure?在文件结构中组织局部视图的最佳方式是什么?
【发布时间】:2013-04-16 14:19:22
【问题描述】:

我的应用程序可能会有很多局部视图,它们可以分组在一个文件夹结构中。看来我应该这样做,否则我将创建一个包含大量文件的查看文件夹。所以我想我应该有类似的东西:

Views -> 
  Group1 -> 
    PartialView1
    PartialView2

HTML.Partial 调用是什么样的?

 HTML.Partial("~/Views/Group1/MyPartialView.cshtml",Model)

我的另一个想法是拥有一个带有条件代码块的 Partial View 文件,但我怀疑这与 PartialViews 的所有内容背道而驰。

最后,如果一个有许多小的局部视图与一个具有多个条件组件的大局部视图相比,性能有什么不同吗?我想我正在考虑将一个文件加载到内存中并编译为代码,而不是加载多个小文件。

谢谢。

编辑:更多信息。

我有一个通用控制器,用于呈现报告的不同部分,因此“介绍”章节的所有部分都将使用“介绍”部分呈现,即“Introduction.Section1”、“Introduction.Section2”。在我的场景中,我不相信我有跨章节的公共部分,所以我可以使用“文件”。想法,但 Views 文件夹会很大,因此我考虑使用子文件夹。

编辑:谢谢大家。这里有一些很棒的想法。我最终采用了文件夹的想法,因为我在其他地方使用了这种方法。但是我确实意识到我需要使用绝对路径,但这不是问题。

【问题讨论】:

  • 您是否考虑过根据实际模型类型使用编辑器/显示模板?它允许您以系统范围的方式将视图链接到模型类型,而无需手动提供部分视图的名称。 (stackoverflow.com/a/5497234/1373170)

标签: asp.net-mvc-3 razor


【解决方案1】:

只要它们在某处的Views 目录中,就没有关系。如果您将其放在Views/{controller}Views/Shared 以外的位置,则需要完全限定的位置,包括Views 和扩展名,因此@Html.Partial("~/Views/Group1/PartialView1.cshtml")

就个人而言,如果您在单个控制器中使用了很多部分,我会将它们留在 {controller-name} 目录中(如@IyaTaisho 建议的那样,使用前导下划线)。但如果它们在多个控制器中使用,并且您需要对它们进行分组,我会将它们分组到 Views/Shared/{groupName} 下。

关于一个大的部分与许多小的部分,我会说要选择许多小的部分。可能有理由不时地做一个大的,但总的来说,我相信部分应该尽可能简单。请记住,您始终可以嵌套分部,因此如果您在许多分部之间共享功能或布局,则可以将其分解为父分部和下面的许多子分部。

【讨论】:

  • 谢谢。实际上,我有一个通用控制器,用于呈现报告的不同部分,因此“介绍”章节的所有部分都将使用“介绍”部分呈现,即“Introduction.Section1”、“Introduction.Section2”。在我的场景中,我不相信我有跨章节的共同部分,所以我可以使用“文件”。想法,但 Views 文件夹会很大,因此我考虑使用子文件夹。
【解决方案2】:

我通常在部分前面添加一个 _。例如有一个名为 Home.cshtml 的主视图。页面上的部分(部分)将具有以下内容:_header.cshtml、_footer.cshtml 等。

【讨论】:

  • 谢谢。是的,知道“_”方法。问题不是区分Partials,而是如何组织大量不同的Partials。
  • 啊,我明白了。我有一个类似的问题。我在当前的项目中继承了其中的大量。现在,我让它保持原样,因为它更容易处理(混合部分和视图)。我几乎会建议为他们制作一个文件夹,但同时我不确定。抱歉,我帮不了你了。
【解决方案3】:

您可以使用父子文件命名约定,例如:

header.html
header.login.html
header.searchbar.html

你甚至可以更进一步:

contact.helpdesk.html
contact.office.html

重复使用部分的频率远低于唯一部分,因此您可以对可重复使用的部分使用约定,例如:

global.partial1.html
global.partial2.html
  • 限制是大文件目录。

  • 优点易于浏览,易于分类。

【讨论】:

  • 有趣的想法。就 MVC3 而言,您认为这是否比为相同目的而拥有文件夹更可取,即 Header\header.html、Header\Login.html、Header\SearchBar.html
  • @SamJolly 你可能会失去理智。此外,在这种情况下,父级不是文件夹,而是文件本身。对父母的偏爱。
  • @Monkieboy 如果你有一个非常大的网络应用程序,你的文件目录会很大,但是很容易浏览。也就是说,所有的父母都在块中,部分将按字母顺序排列。
  • 这很有趣,但看起来它会将您的局部视图明确地与页面视图联系起来(即使它没有)。因此,如果您有一个需要由两个不同视图使用的部分(假设ProductListProductDetails 都使用了ProductPricingInfo),您会如何命名部分?最后,它只是一个名称,因此您可以随心所欲地命名它,并且仍然可以在任何地方使用它,但是这样的约定会给您带来限制它的外观。
  • @JoeEnos 这很好。我认为在这种情况下你可以使用global.name.html 约定。重用分部的频率远低于唯一分部。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
相关资源
最近更新 更多