我正在处理用户输入的表单,其中一个项目(多选项选择)有大量的选择(~1600),所以它必须被过滤掉才能被消化。我有一个3个过滤器字段(下拉列表),我需要完成之后才能将AJAX调用回DB并获得更新列表。它与How to filter the options of a drop down list using another drop down list类似,但我也不想丢失之前选择的任何项目。这是我原型化功能的签名:
public JsonResult GetContentStandardsForUser(string type, string grade, string subject, List<SelectListItem> selected)
我想要的是返回新的项目列表(而不是丢失已经选择的项目),并更新选择列表。
这个AJAX调用看起来是什么样的(使用jquery)?我应该在查询中包含当前选定的值,还是可以像上面所写的那样传递SelectListItem
?
答案 0 :(得分:3)
在考虑了我提出的幻想足球示例之后,我想出了一个解决方案。我做了两个多选,一个是可用的,一个是选中的。只有“选定”列表才会绑定到模型 - 可用列表是查询结果更新的内容。
如果有人可以提出单选控制解决方案,我仍然感兴趣,但对我来说这是一个很好的解决方法。我之所以在寻找单一选择解决方案,是因为我已经使用此插件(http://www.virtuosoft.eu/code/bootstrap-duallistbox/)来过滤我选择/可用的列表。
ETA:我意识到我可以使用jquery在一个列表框中执行此操作。使用ID循环选项,如果未选中,则将其删除。然后从查询中添加所有新选项。瞧!
ETA2:现在有了代码!
//Filter content standards
$("#csType, #csGrade, #csSubject").change(function(){
var type = $("#csType").val();
var grade = $("#csGrade").val();
var subject = $("#csSubject").val();
if(type != "" && grade != "" && subject != "")
{
$("#csList option:not(:selected)").remove();
var items="";
$.getJSON("@Url.Action("GetContentStandardsForUser","Summary")", {type:type, grade:grade, subject:subject} ,function (data) {
$.each(data,function(index,item){
items+="<option value='"+item.Value+"'>"+item.Text+"</option>"
});
$("#csList").append(items)
$("#csList").trigger('bootstrapduallistbox.refresh', true);
});
}
});
答案 1 :(得分:-1)
绑定选项后,请调用以下函数。
$('#csList').multiselect('rebuild');