Kendo UI Multiselect标签模式:输入过滤值未传至服务器
解决Kendo MultiSelect Ajax请求未传递输入文本到后端的问题
我看了你的代码,问题出在Kendo MultiSelect开启serverFiltering后的默认参数传递逻辑上:Kendo UI会把输入的过滤文本以**filter**作为参数名发送给后端,但你的控制器接收的参数名是text,两者不匹配导致参数值为null。下面给你两种可行的解决方案:
方案1:修改控制器参数名适配Kendo默认行为
直接把控制器方法的参数名改成filter,就能接收Kendo默认传递的过滤文本:
public JsonResult GetTags(string filter) { List<Tag> tags = _tagRepository.GetAll(filter).ToList(); return Json(tags); }
方案2:配置前端DataSource,自定义传递的参数名
如果不想修改控制器的参数名,可以在DataSource的transport配置里,手动把过滤文本映射到text参数:
方式一:直接获取输入框值
$("#Tags").kendoMultiSelect({ placeholder: "Select your tags", dataTextField: "Name", dataValueField: "Id", autoBind: false, maxSelectedItems: 5, minLength: 3, delay: 2000, dataSource: { serverFiltering: true, transport: { read: { url: "/Support/Ticket/GetTags", dataType: "json", data: function() { // 获取MultiSelect的输入文本,传给text参数 return { text: $("#Tags").data("kendoMultiSelect").filterInput.val() }; } } } } });
方式二:利用参数映射处理(更贴合Kendo逻辑)
通过parameterMap提取Kendo内置的过滤参数,转成text传递:
$("#Tags").kendoMultiSelect({ placeholder: "Select your tags", dataTextField: "Name", dataValueField: "Id", autoBind: false, maxSelectedItems: 5, minLength: 3, delay: 2000, dataSource: { serverFiltering: true, transport: { read: { url: "/Support/Ticket/GetTags", dataType: "json" }, parameterMap: function(options, operation) { if (operation === "read" && options.filter) { // 提取过滤条件中的文本值,映射到text参数 return { text: options.filter.filters[0].value }; } return options; } } } });
两种方案任选其一,修改后就能正常接收到输入的文本参数了。
内容的提问来源于stack exchange,提问作者Vaduganathan
相关产品推荐
相关产品推荐

