我有一个带有ComboBox的Kendo Grid,它带有一个“包含”过滤器。当用户输入垃圾(也就是列表中的值)时,我想重置过滤器并重新选择最后一个有效值。
我使用Razor语法创建网格,有问题的ComboBox是使用此模板的复合对象:
@(Html.Kendo().ComboBoxFor(m => m)
.Name("CurrentSalesRep")
.Filter("contains")
.DataValueField("Code")
.DataTextField("Name")
.BindTo((System.Collections.IList)ViewData["SalesReps"])
)
为了在我的站点中为所有组合框设置某些通用事件,我运行了一个客户端JQuery例程,该例程基于找到的JQuery选择器设置“焦点”,“模糊”和“更改”事件剑道渲染的文本框。
在焦点上,我存储前一个值,然后是模糊和更改,我想确定输入值是否有效,然后重新选择前一个值:
function setupKendoComboBoxEvents(comboBox, parentContainer) {
var cntrlId = comboBox.attr("Id");
var $ctrl = comboBox;
var $cbx = $ctrl.data("kendoComboBox");
var input = $cbx.input;
input.on("focus", function () {
if ($cbx.select() !== -1) {
$("#" + cntrlId).attr("data-prev-value", $cbx.select());
}
$cbx.value("");
$cbx.open();
});
input.on("change", function (e) {
if ($cbx.select() === -1) {
$cbx.dataSource.filter([]);
$cbx.select(parseInt($("#" + cntrlId).attr("data-prev-value")));
}
});
input.on("blur", function (e) {
if ($cbx.select() === -1) {
$cbx.dataSource.filter([]);
$cbx.select(parseInt($("#" + cntrlId).attr("data-prev-value")));
}
});
}
现在,问题。这对于独立的Kendo ComboBoxes非常有用。但是,当我在Kendo Grid中为ComboBox运行此例程onGridEdit时,过滤器似乎“重置”自身并重新选择所需的主要值。为行提交的值保留“垃圾”值,MVC无法重新构成“CurrentSalesRep”对象,从而导致ModelState无效。
Kendo Grid和Kendo ComboBox的组合有什么特别之处吗?如何保证网格表单中的有效选择?