Asp.net mvc 3 将数据从存储库传递到viewmodel时出现问题
我有下面的视图模型Asp.net mvc 3 将数据从存储库传递到viewmodel时出现问题,asp.net-mvc-3,entity-framework-4,viewmodel,Asp.net Mvc 3,Entity Framework 4,Viewmodel,我有下面的视图模型 public class SiteAdminCreateViewModel { public Customer Customer { get; private set; } public CustomerSite CustomerSite { get; private set; } public SelectList CustomerNames { get; private set; } public SiteAdminCreateViewM
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);
}
}
以及我的存储库中用于返回客户列表和客户站点列表的以下方法
public IQueryable<CustomerSite> GetCustomerSites
{
get { return context.CustomerSites; }
}
public IQueryable<Customer> GetCustomers
{
get { return context.Customers; }
}
但是返回行抛出了错误
无法从System.Collections.Generic.List“转换为”CustomerOrders.Domain.Entities.Customer
我想这是因为我在customer类型的Viewmodel中定义了customer变量,但是我试图传递一个客户列表
有人能就我的错误提出建议吗
我是否需要在viewmodel中定义Customer类型和CustomerNames选择列表类型,我定义Customer对象只是为了使用它将客户传递到选择列表,但我不确定这是否是最好的方法
任何人都可以为新手提供任何建议,我们将不胜感激。您的
SiteAdminCreateViewModel
类的构造函数定义如下:
public SiteAdminCreateViewModel(CustomerSite customerSite, Customer customer) {
...
}
其第二个参数的类型为Customer
您正在向其传递var customer=repository.GetCustomers.ToList()
,其类型为List
当我在控制器中实例化viewmodel时,我想 将要传递的客户列表返回到 视图模型 如果我理解正确的话,您只是试图传递客户列表来构建一个
SelectList
首先,您似乎正在向SelectList
构造函数传递一个字符串。这甚至不会编译(读取)
您需要做的是更改SiteAdminCreateViewModel
的构造函数,如
public SiteAdminCreateViewModel(CustomerSite customerSite, IEnumerable<Customer> customers) {
/* ... */
CustomerNames = new SelectList(customers, "CustomerId", "CustomerName");
}
公共站点AdminCreateViewModel(CustomerSite CustomerSite,IEnumerable customers){
/* ... */
CustomerNames=新的选择列表(customers,“CustomerId”,“CustomerName”);
}
CustomerId
和CustomerName
是Customer
类的属性。您的SiteAdminCreateViewModel
类的构造函数定义如下:
public SiteAdminCreateViewModel(CustomerSite customerSite, Customer customer) {
...
}
其第二个参数的类型为Customer
您正在向其传递var customer=repository.GetCustomers.ToList()
,其类型为List
当我在控制器中实例化viewmodel时,我想 将要传递的客户列表返回到 视图模型 如果我理解正确的话,您只是试图传递客户列表来构建一个
SelectList
首先,您似乎正在向SelectList
构造函数传递一个字符串。这甚至不会编译(读取)
您需要做的是更改SiteAdminCreateViewModel
的构造函数,如
public SiteAdminCreateViewModel(CustomerSite customerSite, IEnumerable<Customer> customers) {
/* ... */
CustomerNames = new SelectList(customers, "CustomerId", "CustomerName");
}
公共站点AdminCreateViewModel(CustomerSite CustomerSite,IEnumerable customers){
/* ... */
CustomerNames=新的选择列表(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,这只是因为您试图将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));
如果可以的话,您可能还需要检查客户是否为空谢谢您的建议我已经更改了构造函数,您能否就如何使用IQueryable方法从存储库返回客户提供建议,为了适应ICollection,我收到另一个转换错误,声明无法从IQueryable转换到ICollection,谢谢again@Liam,改为使用
IEnumerable
?尝试过,但仍然出现转换错误,无法从IEnumerable转换为ICollection。谢谢你的建议,我更改了构造函数,当我收到另一个表示无法从IQueryable转换为ICollection的转换错误时,您能否提供有关如何使用IQueryable方法从存储库返回客户以适应ICollection的建议,谢谢again@Liam,改为使用IEnumerable
?尝试过,但仍然出现转换错误,无法将IEnumerable转换为ICollection。