2011-08-17 4 views
0

첫 번째 드롭 다운 목록 (국가 포함)에서 선택한 항목에 따라 두 번째 드롭 다운 목록 (카운티 포함)을 채우려고합니다.계단식 드롭 다운 목록을 채우기 위해 JSON으로 적절한 결과를 반환하는 방법은 무엇입니까?

public JsonResult GetCounties(string id) 
    { 
     DBEntities dc = new DBEntities(); 
     JsonResult result = new JsonResult(); 
     var filteredDivisions = from div in dc.Divisions 
           where div.CountryID == 1 //id 
           select div; 
     result.Data = filteredDivisions.ToList();   
     return Json(result.Data, JsonRequestBehavior.AllowGet);   

     //   return Json(new[] { 
     // new { Id = filteredDivisions.ToArray()[0].DivisionID, Value = filteredDivisions.ToArray()[0].DivisionName }, 
     // new { Id = 2, Value = "value 2" }, 
     // new { Id = 3, Value = "value 3" }, 
     //}, JsonRequestBehavior.AllowGet); 
    } 

공지 주석 섹션 :

나는 컨트롤러 액션이라는 GetCounties 있습니다. 저에게 잘 작동합니다 (부서 목록에서 첫 번째 값을 얻었고 다른 두 값은 "값 2"와 "값 3"이라고합니다.) 콜백을 테스트하기 위해이 값을 사용했지만 나에게주는 유일한 값이었습니다 결과 사용 :...

return Json(result.Data, JsonRequestBehavior.AllowGet);  

뷰 측에 아무것도를 달성하지 않습니다 디버깅, 모든 권리 값이 존재하지만 다운 목록보기 측의 드롭을 마련하지 않는 내가 말했듯이 때, 내가 얻은 유일한 결과는 주석 처리 된 코드 (하드 코드 된 값은 물론 충분하지 않음)를 사용하는 것입니다. 배열을 채우기 위해 반복을 위해 루프를 사용하려고했지만 아무 것도 작동하지 않습니다. 익명 형식이 읽기 전용이므로 다시 설정할 수 없으므로 오류가 발생합니다.

$(function() { 
      $.getJSON('/Entity/GetCounties', function (result) { 
       var ddl = $('#DivisionsList'); 
       ddl.empty(); 
       $(result).each(function() { 
        $(document.createElement('option')) 
      .attr('value', this.Id) 
      .text(this.Value) 
      .appendTo(ddl); 
       }); 
      }); 
     }); 

divisionslist은 물론 자사의 모든 값을 포함하는 즉, 위의 비 주석 return 문을 사용하여, 단지 변경 반환 모든 카운티와 드롭 다운, 그리고하지 :이 내 jQuery 코드입니다 선택한 나라에 따라 달라질 수있는 것들. JSON을 사용하여 뷰를 가져올 수 있도록 필터링 된 결과를 가진 배열을 어떻게 나타낼 수 있습니까? 내가 게시 한이 코드를 사용하고 싶습니다. 단 한 번 작동 한 코드였습니다. 하드 코딩 된 값을 올바른 값으로 바꿔줘. 그게 내가 문제가되는 곳이야.

도와주세요.

답변

0

나 자신 그것을 해결을 읽습니다. 내가 한 일은 다음과 같습니다.

public JsonResult GetDivisions(int id) 
    { 
     ASNEntities dc = new ASNEntities(); 
     JsonResult result = new JsonResult(); 
     var filteredDivisions = from div in dc.Divisions 
           where div.CountryID == id 
           select div; 

     List<object> listToReturn = new List<object>(); 

     for (int i = 0; i < filteredDivisions.Count(); i++) 
     { 
      Object[] obj = new[]{ 
      new { Id = filteredDivisions.ToArray()[i].DivisionID, Value = filteredDivisions.ToArray()[i].DivisionName }, 
     }; 

      listToReturn.Add(obj[0]);    
     } 

     return Json(listToReturn.ToArray(), JsonRequestBehavior.AllowGet); 

     //return Json(new[] { 
     // new { Id = filteredDivisions.ToArray()[0].DivisionID, Value = filteredDivisions.ToArray()[0].DivisionName }, 
     // new { Id = 2, Value = "value 2" }, 
     // new { Id = 3, Value = "value 3" }, 
     //}, JsonRequestBehavior.AllowGet); 

    } 

위대한 작품입니다.

0
$.getJSON('/Entity/GetCounties', {id: $('#yourCountrySelect').val()},function (result) { 

지금은 텍스트 ^^ 당신의 벽

관련 문제