12

我在让 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

4

3 回答 3

5

我使用了一个版本的 Torbjörn Nomells 答案

除了这里我把 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();
        }
    } 
});
于 2013-05-23T17:26:32.037 回答
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;
};
于 2013-03-04T10:03:10.763 回答
2

我在这里有一个类似的问题:如何在验证摘要中显示 MVC 3 客户端验证结果,但 Darin 建议的解决方案似乎并没有按照我(可能是你)想要的方式工作。

于 2011-03-07T03:51:20.830 回答