如何将一组对象传递给MVC3中的视图?

时间:2012-01-15 13:23:56

标签: asp.net-mvc asp.net-mvc-3

我有以下操作方法,它返回AdminDetail实例的集合:

   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; }
    }

在我的剃须刀视图中,我应该为模型添加什么?如果我只是提出以下内容,那么它只适用于一个实例:

@model Storage.Models.AdminDetail

    @foreach (var detail in Model.AdminDetails)
    {

如何使用我的模型将一个AdminDetails集合传递给视图?我不确定viewdata是否是一个选项,但我宁愿不使用它,因为我听说它不是一个很好的选择。

2 个答案:

答案 0 :(得分: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>
...

答案 1 :(得分:1)

您可以将列表设置为模型 - MVC3中的模型可以是您想要的任何模型。只需将List设置为视图的模型。

或者,使用ViewBag(虽然我不建议在松开IntelliSense时滥用它)。 ViewBag就像一个动态类型的字典,可以从View和Controller中获得。 这是一个例子:

控制器:

ViewBag.Color = "Blue";

查看:

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