如何在Kendo Grid中重置Telerik Kendo ComboBox过滤器

时间:2016-09-30 17:58:39

标签: javascript jquery kendo-ui kendo-grid kendo-combobox

我有一个带有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的组合有什么特别之处吗?如何保证网格表单中的有效选择?

0 个答案:

没有答案