2012-01-15 47 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

相关问题