2012-01-15 26 views
0

我有一個返回AdminDetail實例集合以下操作方法:如何將對象集合傳遞給我的MVC3中的視圖?

public ActionResult DetailData() 
    { 
     var vm = _reference.Detail().ToList(); 
     return PartialView("~/Areas/Administration/Views/References/_DetailData.cshtml", vm); 
    } 

這裏是我的AdminDetail類:

namespace Storage.Models 
{ 
    public class AdminDetail 
    { 
     public string PartitionKey { get; set; } 
     public string RowKey { get; set; } 
     public string Title { get; set; } 
     public string Status { get; set; } 
     public string Type { get; set; } 
     public string Level { get; set; } 
     public string Order { get; set; } 
     public int Row { get; set; } 
    } 

在我的Razor視圖我應該怎麼放的模型?如果我只是把下面則是隻爲一個實例:

@model Storage.Models.AdminDetail 

    @foreach (var detail in Model.AdminDetails) 
    { 

如何使用我的模型視圖我通過AdminDetails的集合?我不確定viewdata是否是一種選擇,但我寧願不使用它,因爲我聽說它不是一個好選擇。

回答

5

你可以使用的AdminDetail集合作爲您的視圖模型類型,這樣就可以通過元素的循環:

@model IEnumerable<Storage.Models.AdminDetail> 
@foreach (var detail in Model) 
{ 
    <div>@detail.Title</div> 
    ... 
} 

或使用顯示模板就能避免循環:

@model IEnumerable<Storage.Models.AdminDetail> 
@Html.DisplayForModel() 

並在相應的顯示模板內自動呈現每個元素的集合(~/Views/Shared/DisplayTemplates/AdminDetail.cshtml):

@model Storage.Models.AdminDetail 
<div>@Html.DisplayFor(x => x.Title)</div> 
... 
+0

1給出的合理的假設'.ToList()'在這種情況下,返回和'IEnum <>' – 2012-01-15 13:27:25

+0

謝謝達林 – 2012-01-15 13:32:30

+0

感謝您的好回答。只是一個問題。當我嘗試你的建議時,我不會在@detail上獲得智能。這是預期的嗎? – 2012-01-15 13:40:31

1

您可以將列表設置爲您的模型 - MVC3中的模型可以是任何您想要的。只需將List設置爲視圖的模型即可。

或者,使用ViewBag(儘管我不建議濫用它,因爲你鬆動了IntelliSense)。 ViewBag就像一個動態類型的字典,可以從視圖和控制器中獲得。 下面是一個例子:

控制器:

ViewBag.Color = "Blue"; 

檢視:

<h1> The color is <%: ViewBag.Color %> </h1> 
+0

但是,如果我這樣做,那麼我將如何在第一行指定它? @model Storage.Models.IEnum 好嗎? – 2012-01-15 13:32:01

+0

另一個回覆說得對: @model IEnumerable (或者你可以說List,但是對於依賴反轉原因,有些人不喜歡它) – 2012-01-15 13:33:56

相關問題