2017-05-22 271 views
0

我有一个ASP.NET MVC程序,其中包含两个下拉列表,国家和地点。 两者都从存储在ViewBag中的SelectLists填充。过滤器选择下拉选择下拉(使用JQuery)

我想要做的是在第一个下拉列表中选择该国家时按组(国家)过滤位置。 (或者通过告诉程序隐藏不在该组中的选项,或者以某种方式自动填充选定的搜索栏与组?)

我已经尝试过各种解决方案,但不能完全得到它工作。

这是我基于了另一个潜在的解决方案在网上的尝试:

 $("#Countries").on('change', function (evt, params) { 
      var selected = params.selected; 

      //var optGroup = $('optgroup[label="' + selected + '"]')[0].outerHTML; 
      var optGroup = $('optgroup[label="' + selected + '"]').html(); 
      $("#Locations").html(optGroup); 
      $("#Locations").trigger("chosen:updated"); 

     }); 

任何帮助,将不胜感激。
谢谢。

编辑
我已经得到了这个解决方案的工作,但它取代了位置列表,所以我不能过滤第二次。

EDIT2
这些都是来自控制器的两条线将数据存储到ViewBag:

ViewBag.Countries = new MultiSelectList(db.tblCountries, "CountryID", "CountryName"); 
ViewBag.Locations = new MultiSelectList(db.tblLocations, "LocationID", "LocationName", "tblCountry.CountryName"); 

如果您知道任何替代方法来解决这个问题,请后下。
感谢

回答

0

只是一句你再次绑定在html之前:

$("#Countries").on('change', function (evt, params) { 
     var selected = params.selected; 

     //var optGroup = $('optgroup[label="' + selected + '"]')[0].outerHTML; 
     var optGroup = $('optgroup[label="' + selected + '"]').html(); 
     $("#Locations").empty(); 
     $("#Locations").html(optGroup); 
     $("#Locations").trigger("chosen:updated"); 

    }); 
+0

这没有奏效。它只是清空了位置列表,并且在我选择另一个国家时不重新填充。我可能是因为列表最初使用ViewBag绑定。 – AmateurDev

+0

我现在得到您的要求。对,因为一旦你更新了html,你就无法获取数据来绑定位置。除非你将它保存在某个地方。 – User3250

+0

您可以发布您用于绑定位置下拉列表的属性吗? – User3250