2011-05-13 7 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); 
} 

그런 다음 보기 다음

위의 코드를 사용하여

viewmodel 두 목록에서 모든 속성에 액세스 할 수 있지만보기로 탐색 할 때보기 오류가 IEnumerable . 만약 선언을 단지 viewmodel

@model trsDatabase.Models.masterViewModel 

로 넘겨 주면 foreach 명령문이 작동하지 않고

이 오류가 발생합니다. 사전에 전달 된 모델 항목은 'trsDatabase.Models'유형입니다. masterViewModel '이지만이 사전에는'System.Collections.Generic.IEnumerable`1 [trsDatabase.Models.masterViewModel] '유형의 모델 항목이 필요합니다.

아무도 조언을 제공하거나 이것을 해결하기위한 올바른 방향으로 나를 가리킬 수 내 viewmodel IEnumerable 수 있습니까?

+0

에 전달, 당신은 찾을거야 그 동일한 고객 각 사이트마다 여러 번 표시됩니다. 내 추측은 CustomerSite이고 고객은 어떤 식 으로든 관련이 있고 대신 CustomerSite.Customers에서 탐색 속성/컬렉션을 사용하거나 평평하게하려는 것입니다. – AaronLS

답변

2

변경이

@model trsDatabase.Models.masterViewModel 

보기 오류이 알려주는 정확하게 인 단일 인스턴스를 기대한다, 그래서 당신은 masterViewModel의 단일 인스턴스에 전달하는이

@model IEnumerable<trsDatabase.Models.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); 
관련 문제