2013-07-25 40 views
2

我正在尝试在ASP.NET WebForms项目中使用KendoUI Validator。 我有一个简单的页面,它有很多输入,当然ASP.NET也添加了一些隐藏的表单元素。如何让KendoUI验证程序忽略隐藏的表单元素?

我有以下问题:

  1. 为什么KendoUI验证没有忽略隐藏表单域,以及如何我得到它?
  2. 为什么KendoUI将规则应用到每个输入字段,以及如何让它忽略一些字段。我需要一种声明性的方式来执行此操作,而不是通过在验证规则中添加各种异常,如KendoUI Validator API页面中的示例所示。
  3. 不应该是,如果没有规则设置为输入元素中的属性(例如;必需),那么不应用验证?

行为我越来越:

  • 含)
  • 隐藏的表单元素进行验证input元素可言,当我打电话.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'); 
    } 
}); 

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

回答

3

对于任何有兴趣的人,我最终得到了对这个问题的回应。我不得不将它发布在KendoUI高级论坛上,以便让某人回复。

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

事实上,隐藏的输入元件通过默认验证 规则逻辑由于这样的事实,有多个窗口小部件 ,其具有一个隐藏的输入作为一部分进行传递有标记。但是,由于内置规则会继承存在某些属性的内容,因此如果缺少 ,则隐藏的输入上不会进行验证。因此,您自己的自定义规则应该处理这种情况,并跳过 适当的元素。例如:

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

工作的呢?似乎该规则只到其他输入,除了只是那些这些设置.... – Maxrunner

+0

我结束了通过添加一个属性我想使用的自定义规则的元素,并赋予它的规则名称的值,然后在该规则检查实施解决方案为那个价值。例如: 例如; user2109254

+1

您应该提供答案的相关部分以及链接。 – Pluc

2

我是新来写这个。如果你对这些信息和输入标签所需的validationMessage财产跨度

只要让隐藏的输入禁用

$('#hidden_input').prop('disabled', true) // won't check in kendo or standard jquery validation 

$('#hidden_input').prop('disabled', false) // will check in kendo or standard jquery validation