好吧,我想我想通了这一点。
这个问题实际上是由于在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