Html.DisplayFor可以自动遍历集合,显示用于集合中的每个元件的局部视图。
您需要做的第一件事是创建一个实际的模型类,集合是类的一个属性。
public class Bar
{
public IEnumerable<Foo> foo { get; set; }
}
从您的控制器而不是原始集合中返回这个类。
其次,你需要一个Foo类的显示模板。显示模板是部分视图,需要放置在文件夹Views/Shared/DisplayTemplates
中。
编辑:如果您想将模板限制到特定的控制器,您可以将它们放在Views的控制器子文件夹中。有关更多信息,请参见this question。
以下是在剃刀语法的例子:
@model YourNameSpace.Foo
<p>@Model.BarBaz</p>
保存它作为在上面给出的DisplayTemplates
夹Foo.cshtml
。
这个模板非常简单,因为它基于你只是显示一个字符串的例子,但是如果集合元素有一个拥有自己属性的类,你可以创建一个更复杂的模板。
现在在原来的观点,你可以摆脱循环的全部,只是写
@Html.DisplayFor(m => m.foo)
注意foo
是在新的模型类的属性包含您之前架设到收旧名称。
DisplayFor将自动知道foo
属性类型(集)Foo
,拿起在DisplayTemplates
文件夹中的Foo.cshtml
模板,一次显示它在foo
每个元素。
我认为,我更愚蠢,因为我不知道如何解释这一点。表达式中不使用lambda形式参数m。那么这仅仅是因为_DisplayFor_需要它吗?另外,我预计'@ Html.Display(item.BarBaz)'也可以工作,但不会呈现任何内容。 – 2013-09-05 11:10:18
@ R.Schreurs看来lambda需要是一个'Func'表达式,它将模型的类型作为参数,但它可以返回任何东西。 – JohnnyHK 2014-04-03 03:40:38
我也很蠢:) – 2014-11-26 09:22:53