将数据从存储库传递到viewmodel时出现问题

时间:2011-08-03 12:11:04

标签: asp.net-mvc-3 entity-framework-4 viewmodel

我有以下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传递给选择列表,但我不确定这是否是最好的这样做的方法?

任何人都可以为新手提供任何建议,我们将不胜感激。

2 个答案:

答案 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");
}

CustomerIdCustomerNameCustomer类的属性。

答案 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));

会起作用,您也可能需要检查客户是否为空