2011-05-13 14 views
2

我使用對於包含數據的兩個列表的主視圖模型下面的代碼,如何製作IEnumerable類型的Viewmodel?

namespace trsDatabase.Models 
{ 
    public class masterViewModel 
    { 
     public IEnumerable <Customer> Customers { get; set; } 
     public IEnumerable <CustomerSite> CustomerSites { get; set; } 
    } 
} 

我使用以下代碼來對veiwmodel傳遞給視圖,

public ViewResult Index() 
{ 
    masterViewModel sitesModel = new masterViewModel(); 

    return View(sitesModel); 
} 

然後,在使用上面的代碼,我能夠從兩個列表訪問視圖模型的所有屬性,但我認爲我有以下,

@model IEnumerable<trsDatabase.Models.masterViewModel> 

foreach (var site in customer.CustomerSites) 
{ 
    foreach (var cust in customer.Customers) 
    { 
     <tr> 
      <td> 
       @cust.CustomerName 
      </td> 
      <td> 
       @site.UnitNo 
      </td> 

當我導航到視圖我得到一個錯誤,因爲視圖預期IEnumerable。如果我改變了聲明,只是通過視圖模型

@model trsDatabase.Models.masterViewModel 

foreach聲明將無法正常工作,它給這個錯誤

傳遞到字典的模型產品類型「trsDatabase.Models的。 masterViewModel',但是這個字典需要一個'System.Collections.Generic.IEnumerable`1 [trsDatabase.Models.masterViewModel]'類型的模型項。

任何人都可以提供任何建議或指出我正確的方向來解決這個問題,是否有可能使我的viewmodel IEnumerable?

+0

在一個不相關的音符,你有這些嵌套循環的方式,你會發現,同一客戶每個站點顯示多次。我的猜測是一個CustomerSite和Customer以某種方式相關,您想要在CustomerSite.Customers上使用導航屬性/集合,或者將其平鋪。 – AaronLS

回答

2

更改此

@model IEnumerable<trsDatabase.Models.masterViewModel> 

這個

@model trsDatabase.Models.masterViewModel 

您傳遞masterViewModel的一個實例,所以你的觀點應該期待一個實例,這正是錯誤是告訴你如果不是以神祕的方式。

1

是的,你可以... 在您模型(masterViewModel)使客戶和CustomerSites名單如下:

namespace trsDatabase.Models 
{ 
public class masterViewModel 
{ 
    public List<Customer> Customers { get; set; } 
    public List<CustomerSite> CustomerSites { get; set; } 
} 
} 

在同一個模型,定義,將返回的IEnumerable這樣的方法:

public IEnumerable<Customer> Getall() 
     { 
      List<Customer> lcustomer= new List<Customer>(); 
      //Get Customer data from Database or wherever 
      lcustomer.Add(new Customer{ firstname= "Quentin ", lastname= "tarantino" }); 
      return lcustomer; 
     } 

在你的控制器中,實例化你的模型。然後調用該查詢返回的IEnumerable基本上客戶列表GETALL()方法,並把它傳遞給你的瀏覽

var rep = new masterViewModel(); 
var model = rep.Getall(); 
return View(model); 
相關問題