Asp.net mvc 3 asp.net mvc 3验证摘要未通过不引人注目的验证显示
我在让asp.net MVC客户端验证按我希望的方式工作时遇到问题 我让它基本上可以工作,但是,直到用户单击submit按钮,验证摘要才会显示,即使在用户通过表单进行选项卡/单击等操作时,单个输入被突出显示为无效。这一切都发生在客户端 我本以为一旦发现输入字段无效,就会显示验证摘要 这种行为是故意的吗?有没有办法解决这个问题,因为我希望在发现其中一个输入字段无效时立即显示验证摘要 我的代码基本上是Asp.net mvc 3 asp.net mvc 3验证摘要未通过不引人注目的验证显示,asp.net-mvc-3,unobtrusive-validation,Asp.net Mvc 3,Unobtrusive Validation,我在让asp.net MVC客户端验证按我希望的方式工作时遇到问题 我让它基本上可以工作,但是,直到用户单击submit按钮,验证摘要才会显示,即使在用户通过表单进行选项卡/单击等操作时,单个输入被突出显示为无效。这一切都发生在客户端 我本以为一旦发现输入字段无效,就会显示验证摘要 这种行为是故意的吗?有没有办法解决这个问题,因为我希望在发现其中一个输入字段无效时立即显示验证摘要 我的代码基本上是 <script src="@Url.Content("~/Scripts/jquery.va
<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);
...
...
@使用(Html.BeginForm())
{
@Html.ValidationSummary(false)
@EditorFor(model=>model);
...
我的
\u Layout.cshtml
引用了jquery-1.4.4.min.js
我这里还有一个类似的问题:但是Darin建议的解决方案似乎没有按照我(可能是您)希望的方式工作。您可以在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();
}
}
以下是上面使用的重置摘要:
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;
};
我用了托尔比约恩·诺梅尔斯的答案 除了这里,我挂起了验证器对象
$.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();
}
}
});
是的,看起来我们基本上遇到了相同的问题。我一直在深入研究jquery.validate.unobtrusive.js代码。据我所知,设置验证摘要的函数是function onErrors,在用户尝试提交之前不会调用它。根据Apress的Pro ASP.NET MVC 3 Framework的作者所说,这是出于设计。在他们关于模型验证的章节中,他们有一个客户端验证的例子,他们指出,当输入更改时,每个字段的消息都会更新,而验证摘要只有在按下表单提交按钮时才会更改。(他们在第630-632页提到了这一点。)很好的解决方案,对我来说很有效。我唯一的改变就是把它挂在验证器上。