2009-10-18 8 views
8

Mam 3 dropdownlists dla kraju, województwa i metra. Chcę gdy seclect użytkownik Kraj następnie State DropDownList wypełnić jQuery i kiedy wybierz Sate następnie Metro DropDownList wypełnienie (jak kaskadowych dropdownlist Ajax) .Te proces chcę zrobić z jQuery.Bind DropDownlists z JQuery w Asp.Net

Odpowiedz

10

Mam zamiar opisać to w ASP.NET MVC, ale to samo można osiągnąć, jeśli albo napisać serwis WWW ASP.NET, albo po prostu umieścić kilka metod strony w kodzie, aby zrobić to samo - ty " Będę potrzebował serializatora JSON, albo rozwiązania firm trzecich, albo tego w WCF.

Korzystanie MVC, po pierwsze, niech mają trzy działania Controller - jeden do wyświetlania strony, kraje będą statyczne, a dwa, aby uzyskać stany i metro odpowiednio:

public ActionResult Index() 
{ 
    ViewData["Countries"] = _countryRepository.GetList(); 
    return View(); 
} 

public ActionResult States(string countryCode) 
{ 
    var states = _stateRepository.GetList(countryCode); 
    return Json(states); 
} 

public ActionResult Metros(string countryCode, string state) 
{ 
    var metros = _metroRepository.GetList(countryCode, state); 
    return Json(metros); 
} 

W widoku, masz trzy DropDownLists, jeden jest związany z ViewData [ „Kraje”] obiekt, mówią, że to o nazwie krajach można dostać stany w jQuery z wywołania AJAX tak:

$('#Countries').change(function() { 
    var val = $(this).val(); 
    $states = $('#States'); 
    $.ajax({ 
     url: '<%= Url.Action('States') %>', 
     dataType: 'json', 
     data: { countryCode: val }, 
     success: function(states) { 
      $.each(states, function(i, state) { 
       $states.append('<option value="' + state.Abbr+ '">' + state.Name + '</option>'); 
      }); 
     }, 
     error: function() { 
      alert('Failed to retrieve states.'); 
     } 
    }); 
}); 

Metros rozwijanej byłyby wypełnione analogicznie, przekazanie wyboru kraju i stanu na serwer d uzyskanie obiektu JSON z szeregiem obszarów miejskich.

Pominąłem szczegóły implementacji repozytorium, po prostu wypełniłem zmienną wyników na serwerze kolekcją obszarów stanów/metra w jakiś sposób. Przyjąłem również założenie, że klasa państwowa będzie miała dwie właściwości - Abbr (np. "CA") i nazwę (np. Kalifornia).

Mam nadzieję, że pomoże Ci to w jakikolwiek sposób, a przynajmniej kieruje Cię w jakiś sposób do rozwiązania.

+1

wielkie dzięki, działa również dla mnie! musiałem wstawić Michel

+0

Och, nie zauważyłem tego! Dzięki, zredagowałem swoją odpowiedź. –

+0

Jedna uwaga, jeśli nie parsowanie do 'json' i zwracanie czegoś takiego jak' List ', musiałem użyć' states.d' lub też właściwości były zawsze niezdefiniowane. – atconway