从Viewmodel访问键入视图中的列表属性

时间:2011-05-12 15:21:24

标签: asp.net-mvc viewmodel ienumerable

我有一个主视图模型,以下两个列表来自两个不同的数据库表,

public IEnumerable <Customer> SomeCustomer { get; set; }
public IEnumerable <CustomerSite> CustomerSites { get; set; }

在我的控制器中我有

public ViewResult Index()
{
    masterViewModel sitesModel = new masterViewModel();
    return View(sitesModel);
}

然后在我看来我写了

@model IEnumerable<trsDatabase.Models.masterViewModel>

如果我尝试使用for each语句

来访问模型
@foreach (var customer in Model)

当我输入@customer时。它只允许我访问两个列表而不是列表中的各个属性。

我以为我能够做到这一点,例如

@customer.CustomerSites.UnitNo

但我能走的最远的是

@customer.CustomerSites

这显然不允许我访问列表中的各个属性

有没有人对我在这里做错了什么有任何想法?我是否需要从控制器中的viewmodel定义属性? (我想不是)

更新

我的viewmodel中有以下代码,

namespace trsDatabase.Models
{
    public class masterViewModel
    {
    public IEnumerable <Customer> Customers { get; set; }
    public IEnumerable <CustomerSite> CustomerSites { get; set; }
    }
}

然后控制器中的以下内容

public ViewResult Index()
{
    masterViewModel sitesModel = new masterViewModel();
    return View(sitesModel);
}

然后我将我的视图声明改为

@model trsDatabase.Models.masterViewModel

这允许我完美地从视图中访问属性,但它会引发foreach循环的错误,因为当视图继承模型而不是Ienumerable列表时它不能被使用,我是否需要更改用于在视图中呈现列表并使用foreachloop以外的其他内容的语法?

1 个答案:

答案 0 :(得分:0)

我认为您需要另一个循环,因为CustomerSites是一个集合:

@foreach (var customer in Model)
    foreach (var site in customer.CustomerSites)
        @site.UnitNo

评论后编辑

创建一个ViewModel类:

class ViewModel
{
    public IEnumerable<Customer> Customer { get; set; }
}

在控制器中填充它并将其传递给View()函数。 更改要键入的视图(@model ViewModel)。 然后在内部视图中,Model属性的类型为ViewModel,您可以通过@Model.Customers

访问客户集合