2014-01-16 39 views
0

我有一個簡單的剃​​刀頁面,其中第一部分正確地顯示了表格中模型中每個元素的信息。之後,我嘗試使用DisplayFor向我顯示模型中的每個屬性,但是它會爲每次迭代生成。我究竟做錯了什麼?爲什麼DisplayForModel不顯示預期的輸出?

@model System.Data.Entity.IDbSet<DBFramework.MyPerson> 
@{ 
    ViewBag.Title = "Home Page"; 
} 
<p></p> 
<table border="1"> 
    <thead> 
     <tr> 
      <th style="width:300px;">Name</th> 
      <th style="width:300px;">Age</th> 
     </tr> 
    </thead> 
    @foreach (var p in Model) 
    { 
     <tr> 
      <td>@Html.Label(p.Name)</td> 
      <td>@Html.Label(p.Age.ToString())</td> 
     </tr> 
    } 
</table> 

@foreach (DBFramework.MyPerson x in Model) 
{ 
    @Html.DisplayForModel(x)<br/> 
} 

創建下面的輸出:

Name Age 
Mike 40 
Penny 1 
Kunal 30 

123 
123 
123 

回答

2

嘗試這種情況:

@foreach (var item in Model) 
    { 
     @Html.DisplayFor(model => item) 
    } 
1

DisplayForDisplayForModel與在視圖模板中使用\共享\ DisplayTemplates。

當您調用DisplayForModel時,它將採用頁面模型(Model),並且如果指定參數,將嘗試使用提供的名稱(如果字符串)加載模板或將對象作爲附加數據添加到ViewData中。當你打電話:

@foreach (DBFramework.MyPerson x in Model) 
{ 
    @Html.DisplayForModel(x)<br/> 
} 

你告訴它 - 顯示Model它的類型是System.Data.Entity.IDbSet<DBFramework.MyPerson>和模板ViewData添加MyPerson。做3次。您也沒有給他提示選擇DisplayTemplate,它會嘗試使用約定來找到它。

正如Bappi達塔說,如果你想顯示MyPerson模板,你需要調用:

@foreach (var item in Model) 
{ 
    @Html.DisplayFor(model => item) 
} 

然而,你需要它接受@model DBFramework.MyPerson創建MyPerson顯示模板來呈現的項目,否則將簡單地做一個.ToString()默認我相信。