Asp.net-Mvc-3

asp.net mvc 3 驗證摘要未通過不顯眼的驗證顯示

  • June 28, 2017

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

您可以將驗證摘要設置為更頻繁地觸發,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;
};

我使用了一個版本的 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();
       }
   } 
});

引用自:https://stackoverflow.com/questions/5213910