Asp.net-Mvc

為集合中的每個項目使用 DisplayTemplate(帶有 DisplayFor)

  • April 13, 2011

我為一個Comment類創建了一個 DisplayTemplate,並將其放在Comment/DisplayTemplates/Comment.cshtml.

Comment.cshtml輸入正確:

@model Comment

然後,我有一個採用IEnumerable<Comment>for 模型的局部視圖。在那裡,我遍歷集合併希望將 DisplayTemplate 用於Comment該類。觀點的完整性:

@model IEnumerable<Comment>

@foreach (var comment in Model.Where(c => c.Parent == null)) { 
   @Html.DisplayFor(model => comment)
}

但是,我收到一條錯誤Html.DisplayFor消息:

傳入字典的模型項的類型為“System.Int32”,但此字典需要“System.String”類型的模型項。

如何為foreach循環中的每個項目呼叫 DisplayTemplate?

而不是擁有一個視圖,IEnumerable<Comment>它所做的只是遍歷集合併簡單地呼叫正確的顯示模板:

@Html.DisplayFor(x => x.Comments)

其中 Comments 屬性是一個IEnumerable<Comment>,它將自動執行循環並Comment.cshtml為該集合的每個項目呈現顯示模板。

或者,如果您真的需要這樣的視圖(不知道為什麼),您可以簡單地:

@model IEnumerable<Comment>
@Html.DisplayForModel()

至於Where您在那裡使用的子句,您應該簡單地刪除它並將此任務委託給控制器。準備視圖模型是控制器的責任,而不是執行此類任務的視圖。

引用自:https://stackoverflow.com/questions/5651697