我有一个实体位置,我正在使用带有内联编辑模式的 Kendu UI 网格。该实体拥有一个属性DisplayName,该属性是必需的,并且不能在数据库中存在两次。
目前,它可以显示所需的验证消息:
它还可以构建在LocationController Ajax InLine Create 方法中调用的方法CustomValidateModel ,该方法检查 Name 是否已经存在于数据库中,然后添加一个ModelError。然后我通过 javascript 在.Events(events => events.Error("onError"))中捕获此错误,然后通过 javascript 弹出窗口显示消息。
ModelState.AddModelError("DisplayName", "Name already exists.");
这就是问题的症结所在:我不想看到这个 javascript 弹出消息。我还想在该字段下方包含此信息,例如“必填字段!” 信息。我已经搜索了很多时间,但大多数人只建议通过 javascript 进行验证和输出,因为它目前有效。
此外,除了弹出窗口之外的实际问题是,用户想要在 Grid 中创建的记录在确认 javascript 弹出窗口后消失。但是为了可用性,我希望新行和输入仍然存在。用户应该能够编辑给定的名称,他想保存。并且 NOT 应该再次输入完整的行。只有验证消息“名称已存在”。应提示信息。
代码:
位置实体:
public class LocationDto
{
public Guid? ID { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Field required!")]
public string DisplayName { get; set; }
// other properties
}
LocationController 动作方法:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreateInline([DataSourceRequest] DataSourceRequest request, LocationDto model)
{
CustomValidateModel(model); // checks if the DisplayName is already existing in the DB
if (model != null && ModelState.IsValid)
{
// Create and Save the Model into database
}
return Json(ModelState.ToDataSourceResult());
}
javascript函数:
function onError(e, status) {
if (e.errors) {
var message = "Error:\n";
$.each(e.errors, function (key, value) {
if (value.errors) {
message += value.errors.join("\n");
}
});
this.cancelChanges();
alert(message);
}
}
我希望有可能以同样的方式让它工作。根据一致的可视化和可用性的增强会很好。