我试图将KendoUI Validator与ASP.NET WebForms项目一起使用。
我有一个简单的页面,其中包含许多输入,并且ASP.NET当然也添加了一些隐藏的表单元素。

我有以下问题:

  • KendoUI Validator为什么不忽略隐藏的表单字段,以及如何将其获取?
  • KendoUI为什么将规则应用于每个输入字段,以及如何使规则忽略某些字段。我想要一种声明式的方式来执行此操作,而不是按照KendoUI Validator API页面中的示例在验证规则中添加各种异常。
  • 不应该是,如果在输入元素中未将任何规则设置为属性(例如;必需),则不应用任何验证?

  • 我得到的行为:
  • 在输入元素上完全没有验证特定属性的情况下,当我调用.validate()
  • 时,验证规则仍然适用
  • 验证隐藏的表单元素。

  • 我正在使用以下剑道:
    http://cdn.kendostatic.com/2013.2.716/js/jquery.min.js
    http://cdn.kendostatic.com/2013.2.716/js/kendo.all.min.js
    http://cdn.kendostatic.com/2013.2.716/styles/kendo.common.min.css
    http://cdn.kendostatic.com/2013.2.716/styles/kendo.default.min.css
    

    我整理了一个小提琴来证明这一点:
    http://jsfiddle.net/codeowl/B5ML4/3/

    这是代码,针对那些无法获得拨弄的人:

    我有以下标记:
    <form action="/" id="testForm">
        <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
        <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
    
        <input type="text" id="testInput" value="">
        <a id="testValidate" href="javascript:;">Validate</a>
    </form>
    

    和以下脚本:
    var validatable = $("#testForm").kendoValidator({
        rules: {
            testRule1: function (input) {
                // Only "Tom" will be a valid value for the FirstName input
                return input.is("[name=firstname]") && input.val() === "Tom";
            },
            testRule2: function (input) {
                return $.trim(input.val()) !== "";
            }
        },
        messages: {
            testRule1: "Your name must be Test",
            testRule2: "Your name must be Foo"
        }
    }).data("kendoValidator");
    
    $("#testValidate").click(function () {
        if (validatable.validate()) {
            alert('passed');
        }
    });
    

    当我按下验证链接时,它会显示隐藏字段的验证消息。

    最佳答案

    对于任何有兴趣的人,我最终都得到了这个问题的答复。我不得不将其发布在KendoUI Premium论坛上,以便有人回应。

    这是响应:
    How do I get KendoUI Validator to ignore hidden form elements?


    testRule2: function (input) {
        if (!input.is(":hidden")) {
            return $.trim(input.val()) !== "";
        }
        return true;
    }
    

    10-06 08:19