【问题标题】:MVC 5 - Validate a specific field on client-sideMVC 5 - 在客户端验证特定字段
【发布时间】:2015-09-05 21:47:15
【问题描述】:

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

使用javascript,

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

【问题讨论】:

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


    【解决方案1】:

    在研究了源代码之后,我得出了这些结论。首先,不显眼的目的是将规则和消息(由 MVC 定义为表单元素上的数据属性)连接到 jQuery.validation。它用于配置/连接验证,而不是围绕它的完整包装,因此在执行已设置的验证时,您不必担心“规避”或不涉及不引人注意的问题。

    所以回答问题:

    1. 是的,有两种方法。 Validator.element(element) 函数和$.fn.valid() 扩展方法。 .valid 实际上在内部调用 Validator.element。不同之处在于.valid 在 jQuery 上工作,它允许您对一个或多个字段(或表单本身)执行验证。 Validator.element 仅对单个元素执行验证,并要求您拥有验证器对象的实例。尽管文档声明 .validate() “验证选定的表单”,但它实际上似乎是为表单初始化验证,如果它已经被调用,它只是返回表单的验证器。因此,这里有两种验证输入的方法示例(在 #2 下方)。

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

    例子:

    <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>
    

    【讨论】:

      【解决方案2】:

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

      详情在这里http://docs.jquery.com/Plugins/Validation/Validator/element#element

      【讨论】:

      • 它说 validate() 将验证表单。我只想验证一个特定的字段。 $("#myField").valid() 似乎告诉我它是否有效,但我没有看到记录在哪里。靠谱吗?
      • 我想这就是你要找的link
      【解决方案3】:
      Use like this:
      
      $('#Create').on('click', function () {
        var form = $('#test').closest('form');
      
        $(form).validate();
      
        if (!$(form).valid()) {
          return
        } else {
          // Bide the data 
        }
      });
      

      希望对你有用

      【讨论】:

      • 我不明白 $("#Create") 是什么,但这似乎检查表单上的验证,而不是特定字段。请参阅问题中的#1。
      • 我只是一个例子。在这样的任何函数或方法中使用它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      相关资源
      最近更新 更多