Kendo网格客户端自定义输入验证通过,但失败'

时间:2014-12-29 12:31:01

标签: jquery asp.net-mvc razor kendo-validator

我有一个Kendo网格中显示的记录列表,我可以在线创建新记录。 要求是,每条记录都有唯一名称

添加新记录时,我有此功能,遍历记录列表,并在添加记录之前检查新记录名称是否唯一。它作为kendo.ui.validator的扩展,为其添加自定义规则。功能:

    //...
uniquenamevalidation: function (input, params) {
                        var errorCount = 0;
                        //check for the rule attribute
                        if (input.filter("[data-val-uniquenamevalidation]").length && input.val()) {
                            var dataSource = $("#grid").data("kendoGrid").dataSource;
                            var data = dataSource.data();
                            //iterating through all grid elements' Names, and comparing to input
                            for (var i = 1; i < data.length; i++) {
                                if (input.val() == data[i].Name) {
                                    errorCount++; //if there are any matches, increase error count
                                }
                            }
                        }
                        console.log(errorCount == 0); 
                        return errorCount == 0;//returns TRUE if there are no matches, therefore input is unique
                    }

当输入无效时,函数返回 false 并且验证应该失败,它会失败并显示正确的错误消息 http://snag.gy/d5TZR.jpg

问题: 当输入有效时,函数返回 true 并且验证应该传递,这个无法解释的错误出现并且不允许我继续。 http://snag.gy/syxds.jpg

1 个答案:

答案 0 :(得分:0)

关于Telerik Demos,我注意到我在函数末尾错过了“return true”语句;看起来应该是这样的

uniquenamevalidation: function (input, params) {
                    var errorCount = 0;
                    //check for the rule attribute
                    if (input.filter("[data-val-uniquenamevalidation]").length && input.val()) {
                        var dataSource = $("#grid").data("kendoGrid").dataSource;
                        var data = dataSource.data();

                        for (var i = 1; i < data.length; i++) {
                            if (input.val() == data[i].Name) {
                                errorCount++;
                            }
                        }
                        return errorCount == 0;
                    }
                    return true;
                }

看起来要验证每个字段,调用所有规则并传递单个字段的参数,然后由第一个if语句过滤 ,以及不关心关于这个领域的规则,只返回true。

不确定这是多么正确,但它现在正常工作,这是我能想到的唯一合乎逻辑的解释。