我使用以下代码作为包含两个数据列表的主视图模型
namespace trsDatabase.Models
{
public class masterViewModel
{
public IEnumerable <Customer> Customers { get; set; }
public IEnumerable <CustomerSite> CustomerSites { get; set; }
}
}
我使用以下代码将veiwmodel传递给视图
public ViewResult Index()
{
masterViewModel sitesModel = new masterViewModel();
return View(sitesModel);
}
然后在我看来,我有以下内容,
@model IEnumerable<trsDatabase.Models.masterViewModel>
foreach (var site in customer.CustomerSites)
{
foreach (var cust in customer.Customers)
{
<tr>
<td>
@cust.CustomerName
</td>
<td>
@site.UnitNo
</td>
使用上面的代码我可以访问viewmodel中两个列表的所有属性,但是当我导航到视图时,我得到一个错误,因为视图期望IEnumerable。如果我将声明更改为只传递viewmodel
@model trsDatabase.Models.masterViewModel
foreach
语句不起作用,它会出现此错误
传递到字典中的模型项的类型为'trsDatabase.Models.masterViewModel',但此字典需要类型为'System.Collections.Generic.IEnumerable`1 [trsDatabase.Models.masterViewModel]'的模型项。 / p>
任何人都可以提出任何建议或指出我正确的方向来解决这个问题,是否可以使我的viewmodel IEnumerable?
答案 0 :(得分:2)
更改此
@model IEnumerable<trsDatabase.Models.masterViewModel>
到这个
@model trsDatabase.Models.masterViewModel
您正在传递一个masterViewModel实例,因此您的视图应该只需要一个实例,这正是错误告诉您的内容,如果不是以一种神秘的方式。
答案 1 :(得分:1)
是的你可以...... 在你的模型(masterViewModel)中像这样生成Customers和CustomerSites List:
namespace trsDatabase.Models
{
public class masterViewModel
{
public List<Customer> Customers { get; set; }
public List<CustomerSite> CustomerSites { get; set; }
}
}
在同一个Model中,定义一个像这样返回IEnumerable的方法:
public IEnumerable<Customer> Getall()
{
List<Customer> lcustomer= new List<Customer>();
//Get Customer data from Database or wherever
lcustomer.Add(new Customer{ firstname= "Quentin ", lastname= "tarantino" });
return lcustomer;
}
在您的控制器中,实例化您的模型。然后调用Getall()方法,该方法将基本上返回IEnumerable客户列表,并将其传递给您的View
var rep = new masterViewModel();
var model = rep.Getall();
return View(model);