【问题标题】:MVC One Type, One Page - Two different DisplayForMVC 一种类型,一页 - 两种不同的 DisplayFor
【发布时间】:2015-06-22 13:25:31
【问题描述】:

我正在构建一个 Intranet,主页上覆盖着显示大量不同数据位的小部件。我有一个 Home.cs 模型,其中包含所需数据的各种 IEnumerables 属性。 我一直在使用 View 文件夹 DisplayFor 模板来呈现该数据。 我现在遇到一个问题,需要以两种不同的方式显示两个不同的员工列表。

我可以使用局部视图来呈现其中一个列表,或者可能继承该类并使用不同的模板。继承似乎需要更多的工作,我想知道是否有人知道 MVC 设计使用的特定方式,或者可能只是任何人喜欢的解决方案?

【问题讨论】:

  • 它们是否与不同的控制器相关联?如果是这样,您可以为每个控制器关联一个 DisplayTemplates 文件夹。

标签: c# model-view-controller asp.net-mvc-5


【解决方案1】:

如果您想为每个员工列表使用不同的显示模板,您可以指定要在 DisplayFor 调用中使用的模板:

@Html.DisplayFor(m => m.StaffListOne, "StaffTemplateOne");
@Html.DisplayFor(m => m.StaffListTwo, "StaffTemplateTwo");

或者您可以在模型属性中添加 UIHint 属性:

[UIHint("StaffTemplateOne")]
public IEnumerable<Staff> StaffListOne { get;set; }

[UIHint("StaffTemplateTwo")]
public IEnumerable<Staff> StaffListTwo { get;set; }

【讨论】:

  • 也感谢您的贡献,UIHint 也缺乏 Enumerable 支持。我还研究了 [DisplayType("CustomType")] 以欺骗渲染使用另一个模板,显然该模板用于与 Enumerables 一起工作,但在 MVC 5 中不再适用。希望 VNext 会给出答案。
【解决方案2】:

只要有两个不同的模板,然后使用this overloadDisplayFor 指定要为每个模板使用的模板:

@Html.DisplayFor(m => m.StaffList, "StaffTemplate1")

@Html.DisplayFor(m => m.StaffList, "StaffTemplate2")

【讨论】:

  • 我更喜欢这个答案,唯一的原因是可维护性,在页面代码中更容易看到为什么使用不同的模板。这也受到缺乏可枚举支持的影响:stackoverflow.com/questions/25333332/… 但公平地说,使用它并为每个循环添加脏,脏比尝试修复可枚举问题更容易。
猜你喜欢
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 2018-10-27
  • 2019-11-25
  • 2020-01-08
  • 1970-01-01
相关资源
最近更新 更多