2011-12-29 5 views
0

에서 JSON 데이터를 recevinig 후 자바 스크립트 선택 목록 옵션을 생성 내가 컨트롤러 (MVC)의 목록이 나는대로 JQuery와에 JSON을 통해 전송컨트롤러

public CompanyController() { 
     _company = new List<CompanyModel>{ 
      new CompanyModel{Name="A 1", Email="[email protected]", Group="Group1"}, 
      new CompanyModel{Name="A 2", Email="[email protected]", Group="Group2"}, 
      new CompanyModel{Name="A 3", Email="[email protected]", Group="Group3"}, 
      new CompanyModel{Name="B 1", Email="[email protected]", Group="Group1"}, 
      new CompanyModel{Name="C 1", Email="[email protected]", Group="Group2"}, 
      new CompanyModel{Name="D 1", Email="[email protected]", Group="Group4"}, 
      new CompanyModel{Name="E 1", Email="[email protected]", Group="Group5"}, 
      new CompanyModel{Name="E 2", Email="[email protected]", Group="Group6"}, 
      new CompanyModel{Name="F 1", Email="[email protected]", Group="Group6"}, 
      new CompanyModel{Name="G 1", Email="[email protected]", Group="Group5"}, 
      new CompanyModel{Name="H 1", Email="[email protected]", Group="Group6"}, 
      new CompanyModel{Name="I 1", Email="[email protected]", Group="Group3"}, 
      new CompanyModel{Name="J 1", Email="[email protected]", Group="Group7"}, 
      new CompanyModel{Name="K 1", Email="[email protected]", Group="Group6"}, 
      new CompanyModel{Name="L 1", Email="[email protected]", Group="Group1"}, 
      new CompanyModel{Name="M 1", Email="[email protected]", Group="Group2"}, 
      new CompanyModel{Name="N 1", Email="[email protected]", Group="Group2"}, 
      new CompanyModel{Name="O 1", Email="[email protected]", Group="Group4"}, 
      new CompanyModel{Name="P 1", Email="[email protected]", Group="Group5"},    
      new CompanyModel{Name="R 1", Email="[email protected]", Group="Group5"}, 
      new CompanyModel{Name="S 1", Email="[email protected]", Group="Group8"}, 
      new CompanyModel{Name="T 1", Email="[email protected]", Group="Group8"}, 
      new CompanyModel{Name="U 1", Email="[email protected]", Group="Group1"}, 
      new CompanyModel{Name="V 1", Email="[email protected]", Group="Group2"}, 
      new CompanyModel{Name="X 1", Email="[email protected]", Group="Group4"}, 
      new CompanyModel{Name="Y 1", Email="[email protected]", Group="Group3"}, 
      new CompanyModel{Name="Z 1", Email="[email protected]", Group="Group3"}, 
      new CompanyModel{Name="W 1", Email="[email protected]", Group="Group6"}, 
     }; 
     } 

이 내 select 태그 <select name="filters" id="filters"></select>에 모든 값을 덧붙입니다. 비슷한 값을 반복하지 않고 Group 값을가집니다.

UPDATE

if (objectCompany != null) { 
    $("#filters").empty(); 
    $("#filters").html("<option value='all' selected='selected'>All groups</option>"); 
    var arrayUnique = []; 
    for (var i = 0; i < objectCompany .length; i++) { 
     for (var j = i + 1; j < objectCompany .length; j++) { 
      if (objectCompany [i].Group === objectCompany [j].Group) { 
       j = ++i; 
      } 
     } 
     arrayUnique.push(objectCompany [i].Group); 
    } 

    arrayUnique = arrayUnique.sort(); 

    $.each(arrayUnique, function (k, v) { 
     $("#filters").append("<option value='" + v + "'>" + v + "</option>"); 
    }); 
     } 

업데이트 : 지금은 작동합니다 :) 왜 자바 스크립트로 어려움을 겪고

답변

1

? 왜 뷰 모델을 사용하지 않습니까? 컨트롤러 액션에서 데이터를 준비하지 않아서 뷰에서 수행해야하는 모든 작업을 표시해야하는 이유는 무엇입니까? JSON에서 반복되는 그룹과 함께 대역폭을 낭비하는 목적은 무엇입니까?

public ActionResult List() 
{ 
    var model = _company.Select(x => x.Group).Distinct(); 
    return Json(model, JsonRequestBehavior.AllowGet); 
} 

가 지금은 간단합니다

var filters = $('#filters'); 
filters.empty(); 
filters.append(
    $('<option/>', { 
     value: 'all', 
     selected: 'selected', 
     text: 'All groups' 
    }) 
); 
$.each(objectCompany, function (index, group) { 
    filters.append(
     $('<option/>', { 
      value: group, 
      text: group 
     }) 
    ); 
}); 

UPDATE :

당신이 별개의 요소를 얻을 것이다 함수를 정의 할 수있는 클라이언트 측에서이 필터링을 수행 할 경우 :

$.extend({ 
    distinct : function(arr, selector) { 
     var result = []; 
     $.each(arr, function(index, value) { 
      var item = selector(value); 
      if ($.inArray(item, result) == -1) { 
       result.push(item); 
      } 
     }); 
     return result; 
    } 
}); 

그 다음에 :

var filters = $('#filters'); 
filters.empty(); 
filters.append(
    $('<option/>', { 
     value: 'all', 
     selected: 'selected', 
     text: 'All groups' 
    }) 
); 
var groups = $.distinct(objectCompany, function(item) { return item.Group; }); 

$.each(groups, function (index, group) { 
    filters.append(
     $('<option/>', { 
      value: group, 
      text: group 
     }) 
    ); 
}); 
+0

Become'objectCompany'가 JS의 다른 함수에서 재사용되고 모든 데이터가 전송 된 것입니다. JS에서만 데이터를 조작하고 싶습니다. 서버로 데이터를 보내지 않고 응답을 되찾고 싶습니다. 이 객체는 거대 할 것이고, 나는 여기에 그것의 일부를 썼다. –

+0

@MichaelSwan, 그럼 다른 컨트롤러 작업을 작성하십시오. 이 AJAX 호출을 위해 특별히 설계되었습니다. 나는 클라이언트에서 뚜렷한 요소를 선택하는 예제를 설명하기 위해 내 대답을 업데이트했지만 이러한 접근법은 권장하지 않습니다. –

+0

내 업데이트 된 코드 (JS로 작성된 마지막 코드)를 참조하십시오. 이제 작동합니다 :) 호출하지 않고/또는 다른 컨트롤러를 만들지 마십시오. –

관련 문제