2011-08-03 54 views
1

我有以下視圖模型,問題從庫將數據傳遞到視圖模型

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.List轉換「到」 CustomerOrders.Domain.Entities.Customer

我想這是因爲我有在Customer類型的Viewmodel中定義的客戶變量,但是我試圖傳遞一個客戶列表?

任何人都可以提供任何意見,我在哪裏錯了嗎?

我是否需要在viewmodel中定義Customer類型和CustomerNames選擇列表類型,我只定義了Customer對象,因此我可以使用它將客戶傳遞給選擇列表,但我不確定這是否是最好的方法來做到這一點?

任何人都可以爲新手提供的建議,將不勝感激。

回答

1

SiteAdminCreateViewModel你類的構造函數定義如下:

public SiteAdminCreateViewModel(CustomerSite customerSite, Customer customer) { 
    ... 
} 

其第二個參數是Customer類型。

你傳遞var customer = repository.GetCustomers.ToList()它,其類型爲List<Customer>


當我instanitiate視圖模型在我的控制器IM想 回報客戶的名單passs在 視圖模型選擇列表中。

如果我明白你說的正確,你只是想通過客戶名單建立一個SelectList

首先,你似乎被路過的一個字符串SelectList構造。這甚至不會編譯(閱讀System.Web.Mvc.SelectList)。

什麼你需要做的是改變SiteAdminCreateViewModel的構造就像

public SiteAdminCreateViewModel(CustomerSite customerSite, IEnumerable<Customer> customers) { 
    /* ... */ 
    CustomerNames = new SelectList(customers, "CustomerId", "CustomerName"); 
} 

CustomerIdCustomerName作爲Customer類的屬性。

+0

感謝您的諮詢IVE改變的構造,可以爲您提供親切如何ammnend的IQueryable的方法從倉庫返回客戶,正好與任何意見ICollection的,因爲我得到另一次轉換錯誤,說明無法轉換從IQueryable的到ICollection的,再次感謝 – Liam

+0

@Liam,使用'IEnumerable'呢? –

+0

試過,但我仍然得到轉換錯誤無法從IEnumerable轉換爲ICollection。 – Liam

0

它只是因爲你試圖使用

var customer = repository.GetCustomers.ToList().FirstOrDefault(); 
      return View(new SiteAdminCreateViewModel(customerSite, customer)); 

將努力IList中通入的SiteAdminCreateViewModel

var customer = repository.GetCustomers.ToList(); 
     return View(new SiteAdminCreateViewModel(customerSite, customer)); 

構造函數,你也可能需要檢查,如果客戶是空