asp.net mvc 3验证摘要未通过不显眼的验证显示

时间:2011-03-06 22:29:38

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

我在使用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

3 个答案:

答案 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建议的解决方案似乎不像我(也可能是你)想要的那样。