2014-03-19 128 views
2

我想使用Html.DisplayModelFor()在視圖中顯示項目列表。爲什麼Html.DisplayForModel()只顯示列表中的一個項目?

這裏是控制器:

public ActionResult Index() { 

     var person = new ApplicationUser(); 
     person.Email = "[email protected]"; 
     person.UserName = "Greg"; 

     var person2 = new ApplicationUser(); 
     person.Email = "[email protected]"; 
     person.UserName = "Gary"; 

     var list = new List<ApplicationUser>(); 
     list.Add(person); 
     list.Add(person2); 

     return View(list); 
    } 

這裏是視圖:

@model IEnumerable<WebApplication32.Models.ApplicationUser> 


@Html.DisplayForModel() 

下面是名爲DisplayTemplate ApplicationUser:

@model WebApplication32.Models.ApplicationUser 
<div> 
    @Html.DisplayFor(u=> u.UserName) 
    @Html.DisplayFor(u=> u.Email) 
</div> 

結果只有第一項是顯示。

如果我改變視圖:

@model IEnumerable<WebApplication32.Models.ApplicationUser> 

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

然後被顯示的各個項目。

但第二種觀點對我沒有意義:在foreach中,'item'似乎沒有被使用。但它正在循環着項目。

+0

這可能重複:http://stackoverflow.com/questions/8002059/asp-net-mvc-display-template-for-a-collection 順便說一句,該方法的名稱是'DisplayForModel()' ,而不是'DisplayModelFor()'。 – ataravati

+0

更正了錯誤。 –

回答

0

DisplayFor預計標識包含要顯示的屬性對象的表達式。模型已經由HtmlHelper(= @ Html)提供。因此你不需要使用你的item變量。

0

爲什麼不使用模型本身:

@foreach (var item in Model) 
{ 
    <label>@item.UserName</label> 
    <label>@item.Email</label> 
} 

或者可以使用

@foreach (var item in Model) 
{ 
    @Html.Display(item.UserName) 
} 
+0

由於實際頁面有許多不同的集合,我希望能夠爲每個集合使用DisplayTemplate/EditTemplate。 –

相關問題