剑道网格破坏命令不刷新网格

Posted

技术标签:

【中文标题】剑道网格破坏命令不刷新网格【英文标题】:Kendo Grid Destroy Command Not Refreshing Grid 【发布时间】:2014-01-03 13:29:23 【问题描述】:

在下面的网格中,我已经实现了 Destroy 方法来删​​除记录,但问题是在服务器端删除过程中发生错误时,剑道网格仍然从网格中删除记录。当我刷新页面记录时,再次按预期出现。如果发生服务器端错误并向用户显示错误消息,我如何防止剑道网格删除记录?

 @(html.Kendo().Grid((IEnumerable<RealEstateApp.Models.propertyOwenerModel>)Model)
        .Name("grid")
        .Columns(columns =>
        
            columns.Bound(o => o.id).Visible(false);

            columns.Bound(o => o.name).Width("150px");
            columns.Bound(o => o.email).Width("100px");
            columns.Bound(o => o.address).Width("200px");
            columns.Bound(o => o.telephone).Width("100px");
            columns.Bound(o => o.mobile).Width("100px");

            columns.Template(o => Html.ActionLink("Edit", "Edit", new  o.id )).ClientTemplate("<a class='k-button k-button-icontext' href=\"" + Url.Action("Edit", "propertyOwner") + "/#= id#\"><span class='k-icon k-edit'></span>Edit</a>").Width(80).Title("Edit");
            if (Roles.IsUserInRole(User.Identity.Name, "admin"))
            
                columns.Command(commands =>
                

                        commands.Destroy(); // The "destroy" command removes data items


                ).Title("Delete").Width(90);
            
            //columns.Template(o => Html.ActionLink("Delete", "Delete", new  o.id )).ClientTemplate("<a class='blue' href=\"" + Url.Action("Details", "propertyOwner") + "/#= id#\"><i class='icon-zoom-in bigger-130'>Delete</i></a>").Width(65).Title("Details");
        )
        .ToolBar(toolbar =>
        

            toolbar.Template(@<text>
    <a class="k-button" href="/propertyOwner/Create"><span class="k-icon k-si-plus"></span></a>
    </text>);


        )
        .Pageable()
        .Sortable()
        .Scrollable()
        .Filterable()
        .Groupable()
        .HtmlAttributes(new  style = "height:900px;" )

         .DataSource(dataSource => dataSource
            .Ajax()
            .PageSize(20)
            .Read(read => read.Action("AjaxGrid", "propertyOwner"))
            .Destroy(destroy => destroy.Action("Destroy", "propertyOwner"))

                .Model(model =>
                
                    model.Id(m=>m.id); // Specify the property which is the unique identifier of the model
                    model.Field(m => m.id).Editable(false); // Make the ProductID property not editable
                )
                 )


    )

【问题讨论】:

【参考方案1】:

您应该在 Schema 定义中定义一个 errors 函数或字段,这是您的服务器将通知发送到 UI 的字段。

然后,在DataSource 中定义一个error 事件处理程序,用于显示警报消息(或您想要执行的任何操作)。

使用errors 字段定义和error 事件处理程序的数据源定义示例:

var dataSource = new kendo.data.DataSource(
    transport: 
        read: 
            url: "http://demos.kendoui.com/service/twitter/search",
            dataType: "jsonp",
            data:  q: "#" 
        
    ,
    schema: 
        errors: "error" // twitter's response is  "error": "Invalid query" 
    ,
    error: function(e) 
        console.log(e.errors); // displays "Invalid query"
    
);

编辑:如果您需要进行一些复杂的验证,而不仅仅是说明哪个字段包含错误,您可以在 schema 中定义一个 errors 函数,该函数返回 true 错误和false 好!

例子:

var dataSource = new kendo.data.DataSource(
    transport: 
        read: 
            url: "http://demos.kendoui.com/service/twitter/search",
            dataType: "jsonp",
            data:  q: "#" 
        
    ,
    schema: 
        errors: function (d) 
            // twitter's response is  "error": "Invalid query" 
            return (d.error && d.error !== "ok") ? true : false;
        
    ,
    error: function(e) 
        ...
    
);

【讨论】:

现在我可以显示一个错误,但是记录仍然从网格中删除并且它没有刷新 为了不删除它,你应该定义一个返回trueerrors函数,当没有error时,你的函数应该返回false。请参阅我的 EDIT 问题。

以上是关于剑道网格破坏命令不刷新网格的主要内容,如果未能解决你的问题,请参考以下文章

刷新网格后剑道ui网格可分页大小发生变化

更改数据源时如何刷新剑道网格

如何用新数据刷新剑道网格

单击按钮时剑道网格不会打开剑道窗口

剑道网格刷新(数据绑定两次)

移动中的剑道网格刷新问题