多个下拉列表的数据绑定,用于显示默认值

时间:2015-09-30 06:51:17

标签: jquery asp.net-mvc-5 cascadingdropdown

我有3个下拉列表要填充(级联)。国家,城市和工厂。对于所有三个下拉列表,数据都会正确绑定。

问题是,当我选择一个国家/地区时,相关城市会正确绑定到城市ddl,但是对于选择到城市ddl的第一个值(默认显示的值),工厂ddl不显示相关工厂。但是,如果我从城市ddl中选择另一个元素,然后再次点击城市ddl的默认显示元素,它可以正常工作。这是我的剧本

<script>
//For ddls
var cityDropdown = $("#SelectedCity"); 

$('#SelectedCountry').change(function () {
    $.ajax({
        url: '@Url.Action("FillCity", "Godown")', 
        type: "GET",
        dataType: "JSON",
        data: { Country: $(this).val() }, 
        success: function (cities) {
            cityDropdown.empty();
            $.each(cities, function (i, city) {
                cityDropdown.append($('<option></option>').val(city.CityId).html(city.CityName));
            });
        }
    });
})

var factoryDropdown = $("#SelectedFactory"); 
        $('#SelectedCity').change(function () {
            $.ajax({
                url: '@Url.Action("FillFactory", "Godown")', 
                type: "GET",
                dataType: "JSON",
                data: {City: $(this).val() }, 
                success: function (factories) {
                  factoryDropdown.empty();
                    $.each(factories, function (i, factory) {
                       factoryDropdown.append($('<option></option>').val(factory.FactoryId).html(factory.FactoryName));
                    });
                }
            });
        })
    </script>

所有帮助表示赞赏。提前谢谢!

1 个答案:

答案 0 :(得分:1)

填充城市后,您需要触发城市下拉列表的.change()事件,以便随后加载关联的工厂

$('#SelectedCountry').change(function () {
  $.ajax({
    ....
    success: function (cities) {
      cityDropdown.empty();
      $.each(cities, function (i, city) {
        cityDropdown.append($('<option></option>').val(city.CityId).html(city.CityName));
      });
      $('#SelectedCity').trigger('change'); // add this
    }
  });
})

然而,这不必要地对服务器进行ajax调用以填充用户可能不感兴趣的城市的工厂。最好添加默认值&#34;请选择&#34; city下拉列表的选项,以便用户可以选择一个城市并填充相关的工厂。

$('#SelectedCountry').change(function () {
  $.ajax({
    ....
    success: function (cities) {
      cityDropdown.empty();
      cityDropdown.append($('<option></option>').val('').html('Please select')); // add this
      $.each(cities, function (i, city) {
        cityDropdown.append($('<option></option>').val(city.CityId).html(city.CityName));
      });
    }
  });
})