将数据从存储库传递到视图模型时出现问题



我有以下视图模型,

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

CustomerIdCustomerNameCustomer类的属性。

这仅仅是因为你试图将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

相关内容

  • 没有找到相关文章

最新更新