2011-03-06 87 views
12

我有問題得到了asp.net MVC客戶端驗證工作,我想如何。asp.net mvc 3驗證總結不顯示通過不顯眼的驗證

我有它基本上工作,但是,直到用戶單擊提交按鈕,即使各個輸入被突出顯示爲無效作爲用戶選項卡/點擊等他們的方式通過窗體時不顯示驗證摘要。這一切都發生在客戶端。

我原以爲只要發現輸入字段是無效的,就會顯示驗證摘要。

這是行爲設計​​嗎?有沒有辦法繞過它,因爲我希望一旦發現其中一個輸入字段是無效的,就會顯示驗證摘要。

我的代碼基本上,

<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

+0

據Apress的臨ASP.NET MVC 3框架的作者,這是由設計。在他們關於模型驗證的章節中,他們有一個客戶端驗證的例子,他們指出,雖然每個字段的消息在輸入被更改時更新,但驗證摘要僅在按下表單提交按鈕時纔會更改。 (他們在第630-632頁提到了這個。) – ngm 2012-03-29 21:52:14

回答

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; 
}; 
+0

偉大的解決方案,爲我工作。我唯一需要改變的就是將其掛掉驗證器。 – 2013-05-23 17:28:40

2

我有一個類似的問題在這裏打開:How to display MVC 3 client side validation results in validation summary但Darin建議的解決方案似乎並不符合我(可能你)希望它的方式。

+0

是的,它看起來像我們有基本相同的問題 – StanK 2011-03-07 19:59:03

+0

我一直在挖掘jquery.validate.unobtrusive.js代碼。從我所知道的情況來看,設置驗證摘要的函數是onErrors函數,在用戶嘗試提交之前不會調用它。 – StanK 2011-03-08 19:55:40

4

我用了一個版本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(); 
     } 
    } 
}); 
相關問題