2011-08-03 4 views
1

나는이 다음 뷰 모델,문제의 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));  
    } 

그러나 리턴 라인은 오류가 발생

CustomerOrders.Domain.Entities.Customer

나는 내가이 있기 때문에이 생각 '에'System.Collections.Generic.List에서 변환 할 수 없습니다 고객 유형의 ViewModel에 정의 된 고객 변수이지만 고객 목록을 전달하려고합니까?

내가 어디에서 잘못 될지 조언 해 줄 사람이 있습니까?

고객 유형과 CustomerNames 선택 목록 유형을 viewmodel에 정의해야합니까, 고객 개체 만 정의 했으므로 선택 목록에 Customers를 전달할 수는 있지만 확실하지는 않습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

누구나 초보자에게 제공 할 수있는 조언이 있으면 감사하겠습니다. 다음과 같이

답변

1

귀하의 SiteAdminCreateViewModel 클래스의 생성자 정의 :

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

그것의 두 번째 인수는 유형 Customer이다.

너는 인 형식으로 var customer = repository.GetCustomers.ToList()을 전달 중입니다.


내가는 뷰 모델에서 선택 목록에 passs하는 반환에 고객의 목록을 원하는 내 컨트롤러 메신저의 뷰 모델을 instanitiate합니다.

정확하게 무엇을 말하는지 이해하면 고객 목록을 전달하여 SelectList을 작성하는 것입니다.

우선, 문자열을 SelectList 생성자에 전달하는 것처럼 보입니다. 이것은 심지어 컴파일되지 않을 것입니다 (System.Web.Mvc.SelectList을 읽으십시오).

은 무엇 당신이해야 할 거라고하면 Customer 클래스의

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

CustomerIdCustomerName되는 속성처럼 SiteAdminCreateViewModel의 생성자를 변경합니다.당신은 또한 당신이 고객이 null의 경우 확인해야 할 수도 있습니다 작동합니다

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

를 사용하여 SiteAdminCreateViewModel

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

의 생성자은 IList를 전달하려고하기 때문에

+0

귀하의 조언을 주셔서 감사합니다 생성자, 당신은 친절하게 리포지토리에서 고객을 반환하기 위해 IQueryable 메서드를 ammnend하는 방법에 대한 조언을 제공 할 수있는, ICollection 내가 또 다른 변환 오류가 IQueryable에서 ICollection으로 변환 할 수 없다는 메시지가 나타나면 다시 감사합니다 – Liam

+0

@Liam, 대신'IEnumerable'을 사용 하시겠습니까? –

+0

시도했지만 변환 오류를 IEnumerable에서 ICollection으로 변환 할 수 없습니다. – Liam

0

단순히이다