好吧,我想我想通了這一點。
這個問題實際上是由於在MVC 3中使用了不顯眼的驗證,因爲它爲您執行了jQuery驗證初始化。因此,配置驗證的唯一方法是使用form.data("validator").settings
。但是,試圖通過這種方法來設置errorLabelContainer
,即:
$("#form").data("validator").settings.errorLabelContainer = "#messageBox";
...不行的,因爲jQuery的驗證只使用該值在內部它的init()函數,配置了一堆的其他設置像容器等。我嘗試模擬它的功能,或者在設置errorLabelContainer
後再次調用$("#form").data("validator").init()
,但這樣做會造成奇怪的行爲並導致一堆其他設置。
所以我採取了不同的方法。首先,我提供了一個地方MVC在個別錯誤字符串使用@Html.ValidationMessageFor()
,並添加display:none
來掩蓋它的說:
@using (Ajax.BeginForm(...))
{
<div class="field-panel">
@Html.EditorFor(m => m.PatientID)
@Html.ValidationMessageFor(m => m.PatientID, null, new { style = "display:none"})
...
</div>
<input type="submit" class="carecon-button-next" value="Next" />
<ul id="error-summary">
</ul>
}
然後,在showErrors
回調,我複製這些字符串,以驗證摘要調用defaultShowErrors()
後:
$("#form").data("validator").settings.onfocusout = function (element) { $(element).valid(); };
$("#form").data("validator").settings.showErrors = function (errorMap, errorList) {
this.defaultShowErrors();
$("#error-summary").empty();
$(".field-validation-error span", $("#form"))
.clone()
.appendTo("#error-summary")
.wrap("<li>");
};
這給了我我想要的,顯示/隱藏驗證錯誤作爲總結爲填寫表單上的域用戶列表的行爲。
你意味着你已經有了一個「驗證摘要」 ......怎麼樣你生成的?它沒有顯示在你的代碼中的任何地方。 – Sparky
添加了頁面代碼的其餘部分.. – lambinator