12

asp.net MVC クライアント側の検証を希望どおりに機能させるのに問題があります。

基本的には機能していますが、ユーザーがタブ/クリックなどでフォームを通過するときに個々の入力が無効として強調表示されていても、ユーザーが送信ボタンをクリックするまで検証の概要は表示されません。これはすべてクライアント側で行われます。

無効な入力フィールドが検出されるとすぐに検証の概要が表示されると思っていたでしょう。

この動作は設計によるものですか? 入力フィールドの1つが無効であることが判明したらすぐに検証の概要を表示したいので、それを回避する方法はありますか?

私のコードは基本的に、

<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

私は同様の質問をここで開いています: How to display MVC 3 client side validation results in validation summary but Darin によって提案された解決策は、私 (そしておそらくあなた) が望むようには機能しないようです。

于 2011-03-07T03:51:20.830 に答える