【发布时间】:2012-03-28 19:21:54
【问题描述】:
所以,我从this Microsoft provided Example 获取了一些代码,它允许我使用 jquery validate unobtrusive 库来解析从我的服务器返回的验证错误消息并将它们显示在 UI 中。他们有一个video demonstrating this。所以,这是我正在使用的一段 Javascript 代码:
$.validator.addMethod("failure", function () { return false; });
$.validator.unobtrusive.adapters.addBool("failure");
$.validator.unobtrusive.revalidate = function (form, validationResult) {
$.removeData(form[0], 'validator');
var serverValidationErrors = [];
for (var property in validationResult) {
//var elementId = property.toLowerCase();
var item = form.find('#' + property);
if (item.length < 1) { item = form.find('#' + property.replace('.', '_')); }
serverValidationErrors.push(item);
item.attr('data-val-failure', validationResult[property].join(', '));
jQuery.validator.unobtrusive.parseElement(item[0]);
}
form.valid();
$.removeData(form[0], 'validator');
$.each(serverValidationErrors, function () {
this.removeAttr('data-val-failure');
jQuery.validator.unobtrusive.parseElement(this[0]);
});
};
因此,在句柄错误函数中发布 AJAX 表单后,我会执行以下操作:
$.validator.unobtrusive.revalidate(form, { 'PhysicalAddress.CityName': ['You must select a valid city'] });
PhysicalAddress.CityName 是我的 viewmodel 属性和 html 输入字段的名称。因此,它知道将验证消息放在正确的 html 元素旁边。
这有效 1 次。然后当他们再次点击提交并且我的代码再次调用 unobtrusive.revalidate 方法时......它不起作用。它只显示一次验证消息,然后验证消息永远消失。
有人知道为什么会发生这种情况吗?..我逐步执行了重新验证方法,没有抛出任何错误,一切似乎都应该工作..但是由于某种原因,不显眼的库没有重新绑定验证错误消息。
谢谢
【问题讨论】:
标签: asp.net-mvc-3 jquery-validate unobtrusive-validation