【问题标题】:How to remove default client-side validators?如何删除默认的客户端验证器?
【发布时间】:2012-09-20 08:50:12
【问题描述】:

我已经根据以下主题中接受的答案实现了下拉 DateTime 控件和验证器: How to validate a date using 3 dropdowns( day, month, year ) using jquery unobtrusive validation?

我正在使用 MVC 4。

这个 3-dropdown 日期大部分都可以正常工作,但有时当我单击这三个下拉菜单并选择不同的值(包括“未选择”值)时,我会从默认 DateTime 验证器中收到错误消息“出生日期必须是日期。”即使我选择了有效的年/月/日并且我的自定义验证器通过了。

当日期设置正确时,此消息不会阻止 POST 表单,但该消息会使用户感到困惑。

当我在 Firebug 中检查不显眼的规则时,我看到这条消息来自默认的“日期”规则。我知道我可以使用规则(“删除”(或删除规则、消息)删除此默认日期规则,但我不确定何时删除它们以停止 MVC 再次添加该规则。

如何删除这个默认的“日期”规则以确保只有我的自定义规则对这三个下拉菜单有效?

【问题讨论】:

    标签: asp.net-mvc validation


    【解决方案1】:

    我没有尝试过,但我猜默认数据类型客户端验证规则是由ClientDataTypeModelValidatorProvider 添加的。此提供程序默认为 ON。您可以尝试从 Global.asax.cs 中的 ModelValidatorProvidersCollection 中删除它。

      var clientDataTypeProvider = ModelValidatorProviders.Providers.FirstOrDefault(p => p.GetType().Equals(typeof(ClientDataTypeModelValidatorProvider)));
      ModelValidatorProviders.Providers.Remove(clientDataTypeProvider);
    

    注意:如果删除它,您也将失去对 number 的验证。其他选项是创建自定义 ClientDataTypeModelValidatorProvider 并将其添加到提供程序集合中。还有一件事是这个想法在全球范围内有效,并影响到所有其他地方。

    【讨论】:

      【解决方案2】:

      所以我发明了一个快速技巧,也许有人会觉得它有用或者有什么需要改进的地方:

      function removeDefaultDateValidators(selector, validatorToRemove) {
          $('form').each(function () {
              var settings = $(this).validate().settings;
              $(selector, this).each(function () {
                  // rules and messages seem to be keyed by element name, not id
                  var elmName = $(this).attr('name');
                  delete settings.rules[elmName][validatorToRemove];
                  delete settings.messages[elmName][validatorToRemove];
              });
          });
      }
      
      $(function () {
          removeDefaultDateValidators('select[data-val-trippleddldate]', 'date');
      });
      

      当页面加载时,它会遍历所有表单并找到应该删除验证器的元素。在我的情况下,我正在从所有具有我的自定义tripledlddate 验证器的下拉列表中删除默认日期验证器。

      在 Firefox 和 IE 9 中测试,“在我的机器上运行”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-01
        • 2015-01-01
        • 1970-01-01
        • 2012-01-23
        相关资源
        最近更新 更多