我有以下视图模型,
public class SiteAdminCreateViewModel
{
public Customer Customer { get; private set; }
public CustomerSite CustomerSite { get; private set; }
public SelectList CustomerNames { get; private set; }
public SiteAdminCreateViewModel(CustomerSite customerSite, Customer customer)
{
CustomerSite = customerSite;
Customer = customer;
CustomerNames = new SelectList(customer.CustomerName);
}
}
以及存储库中用于返回客户列表和CustomerSites列表的以下方法
public IQueryable<CustomerSite> GetCustomerSites
{
get { return context.CustomerSites; }
}
public IQueryable<Customer> GetCustomers
{
get { return context.Customers; }
}
当我在控制器中实例化视图模型时,我想返回要传递给视图模型中的选择列表的客户列表。
public ViewResult Create()
{
CustomerSite customerSite = new CustomerSite();
var customer = repository.GetCustomers.ToList();
return View(new SiteAdminCreateViewModel(customerSite, customer));
}
但是返回行抛出错误
不能从System.Collections.Generic转换。列出"到"CustomerOrders.Domain.Entities.Customer
我认为这是因为我在客户类型的视图模型中定义了客户变量,但我试图传递客户列表?
谁能提供任何建议,我在哪里做错了这里?
我是否需要在视图模型中定义客户类型和CustomerNames选择列表类型,我定义了客户对象,所以我可以使用它将客户传递到选择列表,但我不确定这是否是最好的方法?
任何人都可以为新手提供任何建议,将不胜感激。
您的SiteAdminCreateViewModel
类的构造函数定义如下:
public SiteAdminCreateViewModel(CustomerSite customerSite, Customer customer) {
...
}
第二个参数类型为Customer
。
你正在传递var customer = repository.GetCustomers.ToList()
给它,它的类型是List<Customer>
。
当我在控制器中实例化视图模型时,我想的选择列表中返回要传递给选择列表的客户列表viewmodel .
如果我理解正确的话,你只是试图传递客户列表来构建SelectList
。
首先,你似乎在传递一个字符串给SelectList
构造函数。这甚至不会编译(读取System.Web.Mvc.SelectList)。
你需要做的是改变SiteAdminCreateViewModel
的构造函数,如
public SiteAdminCreateViewModel(CustomerSite customerSite, IEnumerable<Customer> customers) {
/* ... */
CustomerNames = new SelectList(customers, "CustomerId", "CustomerName");
}
CustomerId
和CustomerName
为Customer
类的属性。
这仅仅是因为你试图将IList传递到SiteAdminCreateViewModel的构造函数
var customer = repository.GetCustomers.ToList();
return View(new SiteAdminCreateViewModel(customerSite, customer));
使用var customer = repository.GetCustomers.ToList().FirstOrDefault();
return View(new SiteAdminCreateViewModel(customerSite, customer));
也可以,您可能还需要检查客户是否为null