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