2013-10-24 150 views
3

我有一個項目列表,我傳遞給一個視圖。我想要使​​用顯示模板呈現每個項目。然而,有些事情是錯誤的,因爲我沒有正確渲染該領域。 這裏是我的主視圖(Index.cshtml):MVC剃刀顯示模板

@model IEnumerable<CustomEntity> 

@{ 
    ViewBag.Title = "Index"; 
} 
@Html.DisplayFor(m=>m) 

這裏是我的顯示模板:

@model CustomEntity 
<div> 
    @Html.LabelFor(m=>m.Name): 
    <strong>@Model.Name</strong> 
    @Html.LabelFor(m=>m.Icon): 
    <strong>@Model.Icon</strong> 
    @Html.LabelFor(m=>m.TypeName): 
    <strong>@Model.TypeName</strong> 
</div> 

該頁面加載,但不顯示實體的值。

回答

6
@model IEnumerable<CustomEntity> 

@{ 
    ViewBag.Title = "Index"; 
} 
@Html.DisplayForModel() 

,然後確保您的顯示模板存儲在~/Views/Shared/DisplayTemplates/CustomEntity.cshtml。請注意,顯示模板的位置和名稱非常重要。它應該與類型(CustomEntity.cshtml)的調用方式相同,並且應位於~/Views/Shared/DisplayTemplates之內,或者您也可以在~/Views/XXX/DisplayTemplates中覆蓋它,其中XXX是呈現主視圖的控制器。

+0

是不是會搜索一個以'IEnumerable '爲模型而不是'CustomEntity'的DisplayTemplate? –

+0

謝謝達林!我錯過了我的顯示模板的正確名稱。它被稱爲實體而不是CustomEntity。一旦我改變了名字,它就起作用了。你能告訴我@ Html.DisplayForModel()和@ Html.DisplayFor(m => m)之間的區別嗎? – laconicdev

+0

@RédaMattar,不,當你將一個'IEnumerable '作爲一個屬性傳遞給一個顯示或編輯器模板時,它會查找一個名爲'TModel.cshtml'的模板,它會自動爲這個集合的每個元素調用它,不需要在代碼中編寫任何'foreach'循環。這一切都按照慣例運作。 –

0

您通過Html.DisplayFor類型的數據IEnumerable<CustomEntity>,但您的DisplayTemplate需要CustomEntity。試試這個:

@model IEnumerable<CustomEntity> 

@{ 
    ViewBag.Title = "Index"; 
} 

@foreach(var customEntity in Model) 
{ 
    @Html.DisplayFor(m => customEntity); 
} 
+0

不需要foreach循環。只要一切正確,MVC就會按照慣例處理它。 – Carl