MVC 5 - 验证客户端的特定字段

时间:2015-06-19 19:44:45

标签: javascript jquery asp.net-mvc validation asp.net-mvc-5

我想根据用户在文本框中输入的邮政编码填充城市/州下拉列表。因此,当文本发生变化时,我将进行ajax调用以检索数据。但是,我只想执行有效邮政编码的ajax请求。该字段已使用DataAnnotations.RegularExpression属性和jquery.validate.unobtrusive验证库进行验证。在使用不引人注目的时候,我不清楚jquery.validate可以和不能使用什么。我看过这个不引人注目的代码,但还没有对它有所了解。所以有两个问题:

使用javascript,

  1. 有没有办法强制对特定字段进行验证,而不是整个表单?
  2. 有没有办法检查特定字段是否有效?

3 个答案:

答案 0 :(得分:8)

在挖掘源代码后,我得出了这些结论。首先,不引人注目的目的是将规则和消息(由MVC定义为表单元素上的数据属性)连接到jQuery.validation。它用于配置/连接验证,而不是完整的包装,所以当执行已经设置的验证时,您不必担心"规避" ,或不涉及,不引人注目。

所以回答问题:

  1. 是的,有两种方法。 Validator.element(element)函数和$.valid()扩展方法。 $.valid实际上在内部调用了Validator.element。差异是$.valid适用于jQuery,它允许您在一个或多个字段(或表单本身)上执行验证。 Validator.element仅对单个元素执行验证,并要求您具有验证器对象的实例。虽然文档声明.validate()"验证了所选的表单",但它实际上似乎初始化表单的验证,如果它已被调用,它只是返回表单的验证器。以下是验证输入的两种方法的示例(#2下方)。

  2. 是的,但并非没有执行验证。 #1中的两个方法都返回一个布尔值,因此您可以使用它们来确定字段是否有效。遗憾的是,似乎没有任何库提供的内容允许您检查验证,而不会实际显示或隐藏验证消息。您必须从代码中获取并运行该字段的规则,这可能是可能的,但我的需要并不能证明花时间在其上。

  3. 示例:

    <form>
        <input id="txtDemo" type="text"></input>
    </form>
    ...    
    <script type="text/javascript">
        $("#txtDemo").valid();
    
        //or
    
        //Get the form however it makes sense (probably not like this)
        var validator = $("form").validate();
    
        //Note: while .element can accept a selector, 
        //it will only work on the first item matching the selector.
        validator.element("#txtDemo");
    </script>
    

答案 1 :(得分:5)

您可以找到单个字段是否有效并以这种方式触发此验证: $("#myform").validate().element("#elem1");

详情请http://docs.jquery.com/Plugins/Validation/Validator/element#element

答案 2 :(得分:-2)

Use like this:

$('#Create').on('click', function () {
  var form = $('#test').closest('form');

  $(form).validate();

  if (!$(form).valid()) {
    return
  } else {
    // Bide the data 
  }
});

希望它适合你