我在C#MVC项目中使用ExpressiveAnnotations。在验证视图中的模型时使用它没有问题。但是,我希望在运行时通过JavaScript添加更多的输入元素来扩展表单。添加元素后,我使用这些脚本重新创建表单的验证:
var form = $("form").removeData("validator").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse(form);
元素添加了data-val-assertthat
、data-val-assertthat-fieldsmap
、data-val-assertthat-expression
和一些其他data-val-xxx
属性。验证似乎对新元素有效,但是错误消息都是空的。我想我一定做错了什么。有什么提示吗?
在这个问题上花了很长时间,最终为我当前的ASP.NETMVC项目找到了这个问题。问题隐藏在我如何显示错误中。以前我有如下代码:
$("form").bind("invalid-form.validate", function (form, validator) {
$(validator.errorList).each(function () {
$("<li/>").html(this.message).appendTo(msg);
});
});
问题是this.message
对于那些动态添加的元素是空的?!我的解决方法是:
$(validator.errorList).each(function () {
var error = this.message;
if (!!!error) {
error = $(this.element).attr("data-val-" + this.method);
}
$("<li/>").html(error).appendTo(msg);
});
我不知道为什么在我的ASP.NETMVC项目中错误消息是空的。我试着在JSFiddle上创建一个简单的测试,但一切都如预期。。。。