Asp.net-Mvc-3
asp.net mvc 3 驗證摘要未通過不顯眼的驗證顯示
我在讓 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(); } } });