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。