我有以下viewmodel,
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; }
}
当我在我的控制器中实现viewmodel时,想要返回客户列表以传递给viewmodel中的选择列表。
public ViewResult Create()
{
CustomerSite customerSite = new CustomerSite();
var customer = repository.GetCustomers.ToList();
return View(new SiteAdminCreateViewModel(customerSite, customer));
}
但是返回行会抛出错误
无法从System.Collections.Generic.List'转换为'CustomerOrders.Domain.Entities.Customer
我认为这是因为我在Customer类型的Viewmodel中定义了客户变量,但我试图传递客户列表?
有人可以就我在哪里出错提出任何建议吗?
我是否需要在viewmodel中定义Customer类型和CustomerNames选择列表类型,我只定义了Customer Object,因此我可以使用它将Customers传递给选择列表,但我不确定这是否是最好的这样做的方法?
任何人都可以为新手提供任何建议,我们将不胜感激。
答案 0 :(得分:1)
您的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
类的属性。
答案 1 :(得分:0)
这只是因为你试图将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));
会起作用,您也可能需要检查客户是否为空