Kendo UI MVC Grid - 使用ajax和服务器端验证添加新记录或更新记录

时间:2012-11-01 19:31:15

标签: asp.net-mvc kendo-ui

我使用带有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的状态?它应该以这种方式工作,不确定我是否遗漏了什么?

提前致谢

1 个答案:

答案 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";
        });
    }
});
相关问题