Asp.net mvc 3 asp.net mvc 3验证摘要未通过不引人注目的验证显示

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

我在让asp.net MVC客户端验证按我希望的方式工作时遇到问题

我让它基本上可以工作,但是,直到用户单击submit按钮,验证摘要才会显示,即使在用户通过表单进行选项卡/单击等操作时,单个输入被突出显示为无效。这一切都发生在客户端

我本以为一旦发现输入字段无效,就会显示验证摘要

这种行为是故意的吗?有没有办法解决这个问题,因为我希望在发现其中一个输入字段无效时立即显示验证摘要

我的代码基本上是

<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页提到了这一点。)很好的解决方案,对我来说很有效。我唯一的改变就是把它挂在验证器上。