【发布时间】:2019-07-20 16:02:58
【问题描述】:
我用这个把头发扯掉了……!
我有一个 Telerik kendo mvc ui 网格小部件,使用内联网格编辑模式。当用户向网格添加新条目时(通过自定义下拉编辑控件),我希望它验证该条目是否已存在于网格中。
我有一个 MVC 控制器操作来执行此操作并相应地返回 True 或 False。这完美地工作。这是我正在使用的验证器 javascript 代码。
(function ($, kendo) {
$.extend(true, kendo.ui.validator, {
rules: {
bedQuantity: function (input, params) {
if (input.is("[name='Quantity']") && input.val() <= 0) {
input.attr("data-bedQuantity-msg", "Quantity must be 1 or more");
return false;
}
return true;
},
bedExists: function(input, params) {
if (input.is("[name='BedType']")) {
var model = {
PropertyId: @Model.Id,
BedTypeId: input.val()
};
var url = "/Property/ValidateBedTypeExists";
input.attr("data-val-bedExists-requested", true);
$.ajax({
type: "POST",
url: url,
traditional: true,
data: JSON.stringify(model),
contentType: "application/json; charset=utf-8",
success: function(data) {
return data === false;
},
fail: function(data) {
return false;
}
});
} else {
return true;
}
}
},
messages: {
bedQuantity: function (input) {
return input.attr("data-val-bedQuantity");
},
bedExists: function(input) {
return "This bed type already exists";
}
}
});
})(jQuery, kendo);
无论 ajax 调用返回 true 还是 false,验证器始终将条目标记为无效。
【问题讨论】:
-
我猜验证器在 ajax 请求之前完成。要么将您的请求标记为
async: false(请参阅api.jquery.com/jQuery.ajax),要么将数据提交给控制器并让其验证。
标签: validation telerik kendo-grid kendo-asp.net-mvc