【问题标题】:Custom validation not firing when expected自定义验证未按预期触发
【发布时间】:2011-11-17 04:27:36
【问题描述】:

我在 MVC 视图上使用验证。我在模型的其他属性(如Required和Length)上使用了一些数据注释,但我需要编写一个如下所示的自定义验证器来比较日期。

$(document).ready(function(){

  $.validator.addMethod("enddate", function(value, element) {
         var startdatevalue = $('.startdate').val();
         return Date.parse(startdatevalue) < Date.parse(value);
  }, "End Date should be greater than Start Date.");

});

我将“enddate”类添加到文本框中,以便验证。但是,验证不会按预期触发。在我的场景中,它应该像其他验证器一样在单击提交按钮时触发,但是,当我从文本框中失去焦点时,自定义验证器会触发。当其他验证发生时,有什么方法可以让自定义验证器触发。此外,验证摘要中不会报告错误,但验证器会触发并将文本框的颜色更改为红色。

【问题讨论】:

  • 提交表单时可以调用 $(form).valid() 或 $(form).validate()。
  • 我认为有些混乱。我说其余的验证器已经在点击提交按钮时触发了。这就是我希望这个自定义验证器的行为方式。然而,事实并非如此,它会在文本框失去焦点时触发。谢谢。

标签: jquery asp.net-mvc asp.net-mvc-3 jquery-validate


【解决方案1】:
$(document).ready(function () {
        $.validator.addMethod("endDate", function (value, element) {
            var startDate = $('.startDate').val();
            return Date.parse(startDate) <= Date.parse(value);
        }, "* End date must be Equal/After start date");
    });

它的工作代码,我正在使用它

【讨论】:

    【解决方案2】:

    您可以在单击按钮时调用 $(form).valid() 或 $(form).validate()。

    $("submitbutton").click(function(){
    
    if(!$(form).valid())
    {
      return false;
    }
    
    });
    

    【讨论】:

      【解决方案3】:

      查看以下文章:

      http://nickstips.wordpress.com/2011/11/05/asp-net-mvc-lessthan-and-greaterthan-validation-attributes/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+NickOlsensProgrammingTips+%28Nick+Olsen%27s+Programming+Tips%29

      那里使用的东西像:

      function appendModelPrefix(value, prefix) {
          if (value.indexOf('*.') === 0) {
              value = value.replace('*.', prefix);
          }
          return value;
      }
      

      如果您的模型属于另一个类,这可能是问题所在。例如:MyViewModel.Person 如果是这样,则元素的名称将类似于:Person.Name

      【讨论】:

        【解决方案4】:
        $(document).ready(function(){
          $.validator.addMethod("enddate", function(value, element) {
           var startdatevalue = $('.startdate').val();
           return Date.parse(startdatevalue) < Date.parse(value);
          }, "End Date should be greater than Start Date.");
        $('#yourformid').validate();
        });
        

        我认为它有效。

        【讨论】:

        • 这并不能解决问题。请看我上面的评论。感谢您抽出宝贵时间发帖。
        猜你喜欢
        • 2011-08-16
        • 1970-01-01
        • 1970-01-01
        • 2016-04-11
        • 2020-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多