Jas*_*era 13 jquery unobtrusive-validation asp.net-mvc-4
我有一个使用不显眼的JQuery验证和验证摘要的表单.它很棒.但是,此表单执行Ajax POST,返回JSON结果.如果结果== true,那么我继续.但是,如果JSON结果返回一个消息数组,我想触发表单验证以更新字段.错误返回如下:
{
"errors": [
{ "key" : "NameFirst", "message": "This is the message" },
{ "key" : "NameLast", "message": "This is the message" }
]
}
Run Code Online (Sandbox Code Playgroud)
我解析JSON结果并调用showErrors(),如下所示:
for (var j = 0; j < response.errors.length; j++) {
var key = response.errors[j].key;
var error = {};
error[key] = response.errors[j].message;
$form.data('validator').showErrors(error);
}
Run Code Online (Sandbox Code Playgroud)
这会正确突出显示字段,但不会更新验证摘要.我怎样才能更新?
此外,有时错误是通用的,不会映射到模型中的特定属性/字段.在这种情况下,它们返回null键,如:
{
"errors": [
{ "key" : null, "message": "This is the message" },
{ "key" : null, "message": "This is the other message" },
{ "key" : "NameFirst", "message": "This is the message" },
{ "key" : "NameLast", "message": "This is the message" }
]
}
Run Code Online (Sandbox Code Playgroud)
我不能在那些上调用showErrors,因为它们没有映射到字段标识符.一旦我被告知如何更新摘要,我确定我可以将项目附加到列表中以获取通用消息,但我愿意接受其他建议.谢谢!
UPDATE
这是我最终做的,似乎工作得很好.除了在有效的键控错误上调用showErrors之外,我还必须手动构建摘要:
var $summary = $form.find("[data-valmsg-summary=true]")
.addClass("validation-summary-errors")
.removeClass("validation-summary-valid");
var $ul = $summary.find("ul").empty();
var error = {};
$.each(response.errors, function () {
if (this.key)
error[this.key] = this.message;
$("<li />").html(this.message).appendTo($ul);
});
$form.validate().showErrors(error);
Run Code Online (Sandbox Code Playgroud)
我希望这有助于其他人.
我遇到了同样的问题,无法找到更干净的方法。这就是我想做的
代替这个
for (var j = 0; j < response.errors.length; j++) {
var key = response.errors[j].key;
var error = {};
error[key] = response.errors[j].message;
$form.data('validator').showErrors(error);
}
Run Code Online (Sandbox Code Playgroud)
把这个,
var error = {}, keyLess = 0;
for (var j = 0; j < response.errors.length; j++) {
var key = response.errors[j].key;
error[key || keyLess++] = response.errors[j].message;
}
$form.validate().showErrors(error);
var container = $form.find("[data-valmsg-summary=true]"),
list = container.find("ul");
if (list && list.length) {
list.empty();
container
.addClass("validation-summary-errors")
.removeClass("validation-summary-valid");
$.each(error, function(k,m) {
$("<li />").html(m).appendTo(list);
});
}
Run Code Online (Sandbox Code Playgroud)
这基本上就是 jQuery.validate.unobtrusive 的作用
你怎么认为?
| 归档时间: |
|
| 查看次数: |
8142 次 |
| 最近记录: |