我有一个主视图模型,以下两个列表来自两个不同的数据库表,
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以外的其他内容的语法?
答案 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