2009-08-17 5 views
2

선택 목록에서 선택한 항목을 가져 오는 데 문제가 있습니다.SelectlistItem selected = true 문제

Product product = _pr.GetProducts().ByProductID(productID).First(); 
     product.Categories.Load(); 
     ICollection<Category> allCategories = _cr.GetCategories().ToList(); 

     List<SelectListItem> Categories = (from category in allCategories 
              select 
              new SelectListItem 
              { 
               Selected = product.Categories.Contains(category), 
               Value = category.CategoryID.ToString(), 
               Text = category.Categoryname 
              }).ToList(); 

카테고리 4 개 항목을 반환하고, 선택된 내가 3 개 항목이 정확한지, 거기에있다 "product.Categories"를 가져 가면 ....... 모두 거짓입니다 ....하지만 어떻게 든 나던 true로 설정하십시오.

무엇이 잘못되었을 수 있습니까? /M

답변

1

당신이 Equals()GetHashCode()를 오버라이드 (override)하지 않는 한 단지 동일한 인스턴스와 일치 할 기본 객체 비교를 사용하려고 사용하는 Contains()의 과부하. 한 가지 옵션은 사용자 정의 CategoryEqualityComparer을 작성하여 this overload of Contains()으로 전달하는 것입니다. 또는 ID의 카테고리에 가입 할 수 있습니다.

Product product = _pr.GetProducts().ByProductID(productID).First(); 
product.Categories.Load(); 
ICollection<Category> allCategories = _cr.GetCategories().ToList(); 

List<SelectListItem> Categories = (
    from category in allCategories 
    join pc in product.Categories 
     on category.CategoryID equals pc.CategoryID into j 
    select 
    new SelectListItem 
    { 
     Selected = j.Any(), 
     Value = category.CategoryID.ToString(), 
     Text = category.Categoryname 
    }).ToList(); 
+0

빌어 먹을. 당신은 14 초 정도 나를 이겼어 :) – sirrocco

0

'allCategories'를 _cr.GetCategories 컬렉션으로 설정했습니다. 해당 컬렉션의 카테고리가 제품에 포함되어 있는지 확인하십시오. 카테고리 입력란에 제품 카테고리가 하나도없는 것 같습니다. 각 컬렉션에있는 내용을 게시 할 수 있습니까?

+0

Visual Studio에서 쉽게 속임수를 사용합니까? –

+0

나는 잘 모르겠다. 나는 그렇게 생각하지 않는다. foreach() 루프를 사용하여 콘솔에 출력 할 수 있습니다. – shanabus

관련 문제