我使用带有Ajax绑定的Knedo UI MVC网格实现了内联编辑, 服务器端验证在控制器中处理并使用 -
发回错误ModelState.AddModelError(“Error:”,ex.Message);
@(Html.Kendo().Grid<AnalyticsServiceWeb.ViewModel.SomeViewModel>()
.Name("Grid")
.Columns(columns =>
{
columns.Bound(p => p.Name);
columns.Bound(p => p.Path);
columns.Bound(p => p.Space);
columns.Command(command => { command.Edit(); command.Destroy(); });
})
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable.Mode(GridEditMode.InLine))
)
function error_handler(e) {
if (e.errors) {
var message = "Errors:\n";
$.each(e.errors, function (key, value) {
if ('errors' in value) {
$.each(value.errors, function () {
message += this + "\n";
});
}
});
alert(message);
}
}
当存在服务器端异常时,服务器端错误消息将显示,但它仍然在UI中完成操作,我的意思是它将新记录添加到网格并更新,即使存在服务器端异常。
在行动开始之前有没有办法保留UI的状态?它应该以这种方式工作,不确定我是否遗漏了什么?
提前致谢
答案 0 :(得分:1)
Kendo UI支持(大多数)View模型中的数据注释,这将为您提供Kedno UI提供的客户端不显眼的验证,您可以通过查看ModelState
因此,在Controller Action中执行此操作将处理服务器端验证
If(ModelState.IsValid)
{
//Write to the Database
}
else
{
//We Have Validation Error, return the model for correction
}
以下是一些例子
[Required]
[DataType.Currency]
public decimal Currency { get; set; }
这告诉网格货币字段需要(显然),但更酷的是Kendo Grid将在编辑时自动呈现其货币文本框
它会对日期和时间做同样的事情,所以这将呈现其日期选择器
[Required]
[DataType.Date]
public decimal Date { get; set; }
要显示服务器端验证错误,请尝试以下操作:
错误的关键字包含字段的名称。您可以使用它来生成包含错误的属性名称的消息,例如
$.each(e.errors, function (key, value) {
if ('errors' in value) {
message += key + ":\n";
$.each(value.errors, function () {
message += this + "\n";
});
}
});