我在使用asp.net MVC客户端验证时遇到了问题。
我基本上可以使用它,但是,在用户单击提交按钮之前不会显示验证摘要,即使各个输入被突出显示为无效,因为用户标签/点击等通过表单。这一切都发生在客户端。
我原以为只要发现输入字段无效就会显示验证摘要。
这种行为是否符合设计要求?有没有办法解决它,因为我希望一旦发现其中一个输入字段无效就会显示验证摘要。
我的代码基本上是
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
...
@using (Html.BeginForm())
{
@Html.ValidationSummary(false)
@Html.EditorFor(model => model);
...
我的_Layout.cshtml
引用jquery-1.4.4.min.js
。
答案 0 :(得分:5)
我使用了一个版本的TorbjörnNomells回答
除此之外,我将resetSummary挂起验证器对象
$.validator.prototype.resetSummary= function () {
var form = $(this.currentForm);
form.find("[data-valmsg-summary=true]")
.removeClass("validation-summary-errors")
.addClass("validation-summary-valid")
.find("ul")
.empty();
return this;
};
然后将其调用为
$.validator.setDefaults({
showErrors: function (errorMap, errorList) {
this.defaultShowErrors();
this.checkForm();
if (this.errorList.length) {
$(this.currentForm).triggerHandler("invalid-form", [this]);
} else {
this.resetSummary();
}
}
});
答案 1 :(得分:4)
您可以设置验证摘要,以便在onready上更频繁地触发:
var validator = $('form').data('validator');
validator.settings.showErrors = function (map, errors) {
this.defaultShowErrors();
this.checkForm();
if (this.errorList.length)
$(this.currentForm).triggerHandler("invalid-form", [this]);
else
$(this.currentForm).resetSummary();
}
}
这是上面使用的resetSummary:
jQuery.fn.resetSummary = function () {
var form = this.is('form') ? this : this.closest('form');
form.find("[data-valmsg-summary=true]")
.removeClass("validation-summary-errors")
.addClass("validation-summary-valid")
.find("ul")
.empty();
return this;
};
答案 2 :(得分:2)
我在这里打开了一个类似的问题:How to display MVC 3 client side validation results in validation summary但Darin建议的解决方案似乎不像我(也可能是你)想要的那样。