我有一个Kendo自动完成下拉列表,其中包含搜索过滤器。

当我从下拉菜单中选择一个特定的项目时,该值将被成功选择并保存到数据库,但是当我按下AutoComplete中的退格键时,该页面将自动回发,而无需用户从下拉菜单中选择任何搜索到的值。

按下退格键之后的值(不是所需的值或选定的值)将传递到控制器,然后传递到DB。

具体实现如下:

@(Html.Kendo().AutoComplete()

        .Name("SampleCode")
        .DataTextField("Code")


    .Suggest(true)
    .Filter(FilterType.Contains)
            .DataSource(source =>
            {
                source.Read(read =>
                {
                    read.Action("GetCode", "GetFunct") // call to controller function
                        .Data("FilterCode");
                })
                .ServerFiltering(true);
            })

             .HtmlAttributes(new { @class = "selectlist", style = "width:204px" })
             .Events(evt => evt.Close("OnSelectCode"))

)


这是Javascript代码

<script>
    function FilterCode() {

        var SubCode = $("#SubCode")[0].form.SubCode.value;
        //The values in SampleCode dropdown are displayed depending upon the value selected in SubCode dropdown
        return {
            subCode: subCode
        }
    }

    function OnSelectCode(e) {

        var Code = $("#SampleCode").data("kendoAutoComplete").value().toString();
}

</script>


控制器功能正常运行,并且数据已正确加载到AutoComplete中,这就是为什么我没有发布相应的代码。

任何想法都是最欢迎的:)

最佳答案

为了防止当用户在Kendo Auto complete中按下退格键时回发到控制器,您必须确保将变量与close()函数绑定

解决方案后的代码:

@(Html.Kendo().AutoComplete()

    .Name("SampleCode")
    .DataTextField("Code")


.Suggest(true)
.Filter(FilterType.Contains)
        .DataSource(source =>
        {
            source.Read(read =>
            {
                read.Action("GetCode", "GetFunct") // call to controller function
                    .Data("FilterCode");
            })
            .ServerFiltering(true);
        })

         .HtmlAttributes(new { @class = "selectlist", style = "width:204px" })
         .Events(evt => evt.select("OnSelectCode"))  //Changed from "evt.Close" to "evt.Select" to prevent post back when user presses backspace


)


您可以通过Kendo Autocomplete控件使用.select事件,但是在Javascript函数“ OnSelectCode”内部,您可以使用“ close”属性绑定变量

如下更改JavaScript函数OnSelectCode:-

function OnSelectCode(e) {

        var Code = $("#SampleCode").data("kendoAutoComplete").value().toString();
        Code.bind("close", OnSelectCode); // Added to prevent post back when user presses backspace, close the function called by the .select event in Kendo Auto Complete

}

10-07 22:26