【问题标题】:Reset validation and clear validation message for Asp.Net MVC custom validation重置验证并清除 Asp.Net MVC 自定义验证的验证消息
【发布时间】:2019-02-15 20:42:16
【问题描述】:

我正在使用带有 jQ​​uery 1.7.2 的 MVC 3,并且我已经在客户端和服务器端实现了一些自定义验证,以验证某个文本区域是否具有文本(如果选中了一个复选框)。

我实现不显眼验证的客户端代码如下所示:

 $.validator.addMethod("requiredif", function (value, element, params) {
    if (value) {
      var id = '#' + params["otherproperty"];
      var control = $(id);
      if (control.val() == '') {
        return false;
      }
    }

    return $.validator.methods.required.call(this, value, element, params);
});

$.validator.unobtrusive.adapters.add("requiredif", ["otherproperty"], function(options) {
   options.rules["requiredif"] = options.params;
   options.messages["requiredif"] = options.message;
});

我的问题是,如果我随后返回并取消选中复选框(即不再需要文本),即使验证触发,验证消息仍然存在并且验证不会被清除。

我已尝试以下方法来清除验证:

 $('#Dashboard').on('change', '#Damaged', null, function () {
   var validator = $('#Gridform').validate();
   validator.resetForm();
 });

但这没有任何区别。

我希望验证与标准验证一样工作,即当我取消选中复选框或在文本区域中输入内容时,验证被清除/重置。

【问题讨论】:

  • 你在使用“ValidationMessageFor”助手吗?
  • 问题是这个requiredif适配器是和textarea关联的,而不是和checkbox关联的。
  • 嗨达林,你是对的,这与错误的控制有关!其他两个问题仍然存在(1)验证摘要仍然存在,(2)验证在 IE7 中不起作用
  • 感谢 Yasser,该代码中有一些很好的指示

标签: jquery asp.net-mvc-3 unobtrusive-validation


【解决方案1】:

试试这个解决方案,它在我的项目中工作:

<button type="reset" onclick="$('.text-danger').hide();">Reset</ button>

<button type="submit" onclick="$('.text-danger').show();">Submit</button>

您也可以像在项目中一样更改选择器,在我的情况下,我将 (text-danger) 类添加到我的验证器中:

@Html.ValidationMessageFor(model => model.fieldName, "", new { @class = "text-danger" })

John Culviner 还找到了一个更好的解决方案,并且效果很好

1-包含jquery(页面结束)后编写此脚本:

<script>
    //clear validation on reset button clicked
    (function ($) { 
        //re-set all client validation given a jQuery selected form or child
        $.fn.resetValidation = function () {
            var $form = this.closest('form');

            //reset jQuery Validate's internals
            $form.validate().resetForm();

            //reset unobtrusive validation summary, if it exists
            $form.find("[data-valmsg-summary=true]")
                .removeClass("validation-summary-errors")
                .addClass("validation-summary-valid")
                .find("ul").empty();

            //reset unobtrusive field level, if it exists
            $form.find("[data-valmsg-replace]")
                .removeClass("field-validation-error")
                .addClass("field-validation-valid")
                .empty();

            return $form;
        };
    })(jQuery);
</script> 

2- 添加点击事件调用Jquery函数

<button type="reset" onclick="$(this).resetValidation()" >Reset</button>

See here for article by John

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 2012-12-12
    相关资源
    最近更新 更多