2012-07-09 6 views
1

나는 거의 정확히 같은MVC3 캐스케이드 드롭 다운 및 JSON 객체가

Easiest way to create a cascade dropdown in ASP.NET MVC 3 with C#

내보기에 설명 MVC3 내 계단식 드롭 다운 목록을 구현했습니다에게

<script type="text/javascript"> 
    $(function() { 
     $('#CategoryID').change(function() { 
      var selectedCategoryId = $(this).val(); 
      $.getJSON('@Url.Action("SelectCategory")', { categoryid: selectedCategoryId }, function (subcategories) { 
       var subsSelect = $('#SubCategoryID'); 
       subsSelect.empty(); 
       $.each(subcategories, function (index, subcat) { 
        subsSelect.append(
         $('<option/>') 
          .attr('value', subcat.SubCategoryID) 
          .text(subcat.SubCategoryName) 
        ); 
       }); 
      }); 
     }); 
    }); 
</script> 

내 컨트롤러가 있다고했다 그

public ActionResult SelectCategory(int categoryid) 
{ 
    var subs = db.SubCategories.Where(s => s.CategoryID == categoryid).ToList(); 
    return Json(subs, JsonRequestBehavior.AllowGet); 
} 

그리고 작동하지 않았습니다.

public class JsonSubCat 
{ 
    public int SubCategoryID { get; set; } 
    public string SubCategoryName { get; set; } 
} 

public ActionResult SelectCategory(int categoryid) 
{ 
    var subs = db.SubCategories.Where(s => s.CategoryID == categoryid).ToList(); 
    var testsubs = new List<JsonSubCat>(); 

    foreach (var sub in subs) 
    { 
     testsubs.Add(new JsonSubCat() { SubCategoryID = sub.SubCategoryID, SubCategoryName = sub.SubCategoryName }); 
    } 

    return Json(testsubs, JsonRequestBehavior.AllowGet); 
} 

내가 적절한 형식으로 데이터 소스에서 얻을 나의 실체를 변환하는 질문 같은데 : 나는 컨트롤러에게 다음과 같은 방법을 수정할 때

그러나, 그것은했다. 이것을 구현하는 올바른 방법은 무엇입니까?

+0

첫 번째 SelectCategory에서 AJAX 응답을 볼 불을 지르고 사용할 수 또는 유사한한다 동작. JSON 객체를 반환하는 방법을 확인하고 JS가 해당 형식과 일치하는지 확인하십시오. – Daveo

답변

3

이것을 구현하는 올바른 방법은 무엇입니까?

도메인 엔티티에 순환 참조가있는 것으로 의심됩니다. JSON 형식은 순환 구조를 지원하지 않으므로 JSON 직렬 기가 지원하지 않습니다.

도메인 모델을보기에 전달하면 안됩니다. 이 작업을 중단하고 뷰 모델을 사용하십시오. 이보기가 관심을 가지는 모든 것이 텍스트 및 값의 모음 인 경우 전체 subs 엔터티를보기에 전달하는 이유는 무엇입니까? 그게 모두 드롭 다운리스트에 필요한거야.

그래서보기 모델을 사용하지 이미 큰 하나 =>는 JsonSubCat 클래스를 쓴 언급 :

public ActionResult SelectCategory(int categoryid) 
{ 
    var subs = db.SubCategories 
     .Where(s => s.CategoryID == categoryid) 
     .ToList() 
     .Select(x => new JsonSubCat 
     { 
      SubCategoryID = x.SubCategoryID, 
      SubCategoryName = x.SubCategoryName 
     }); 
    return Json(subs, JsonRequestBehavior.AllowGet); 
} 
관련 문제