Kendo ui 如何修改剑道网格';s在发布到服务器之前编辑的值

Kendo ui 如何修改剑道网格';s在发布到服务器之前编辑的值,kendo-ui,kendo-grid,kendo-asp.net-mvc,telerik-mvc,kendo-datasource,Kendo Ui,Kendo Grid,Kendo Asp.net Mvc,Telerik Mvc,Kendo Datasource,我有剑道网格,可以进行InCell编辑。网格也配置为凝乳操作。 因此,每当网格行中发生更改时。用户必须单击SaveChanges命令按钮来保存更改。网格将向服务器发布行模型的集合 @(Html.Kendo().Grid<mymodel>() .Name("mygrid") .Columns(columns => {

我有剑道网格,可以进行InCell编辑。网格也配置为凝乳操作。 因此,每当网格行中发生更改时。用户必须单击
SaveChanges
命令按钮来保存更改。网格将向服务器发布行模型的集合

             @(Html.Kendo().Grid<mymodel>()
                    .Name("mygrid")
                    .Columns(columns =>
                    {
                       //columns here
                        columns.Command(command => command.Destroy()).Width(100);
                    })
                    .ToolBar(toolbar =>
                    {
                        toolbar.Create();
                        toolbar.Save();
                    })
                    .Editable(editable => editable.Mode(GridEditMode.InCell))
                    .Pageable()
                    .Navigatable()
                    .Sortable()
                    .Scrollable()
                    .Filterable()
                    .AutoBind(true)
                    .DataSource(dataSource => dataSource
                        .Ajax()
                        .Batch(true)
                        .PageSize(20)
                        .ServerOperation(false)
                        .Model(model =>
                        {
                            model.Id("Id");
                            var f = model.Field("Id", typeof(int));
                            f.Editable(false);
                        })
                         .Model(model =>
                         {
                             model.Id("Id");
                             var f = model.Field("Id", typeof(int));
                             f.Editable(false);
                         })
                        .Create("Create", "Test")
                        .Read("Get", "Test")
                        .Update("Update", "Test")
                        .Destroy("Delete", "Test")
                    ))

如何更新即将发布到服务器的模型?SaveChanges事件是否是处理此场景的正确事件?

我不熟悉kendo for asp.net,因此无法给出确切答案,但通常您可以在发送前拦截、添加或修改
parameterMap
中的数据,例如:

dataSource = new kendo.data.DataSource({
    transport: {
        read:  {
            url: crudServiceBaseUrl + "/Products",
            dataType: "jsonp"
        },
        update: {
            url: crudServiceBaseUrl + "/Products/Update",
            dataType: "jsonp"
        },
        destroy: {
            url: crudServiceBaseUrl + "/Products/Destroy",
            dataType: "jsonp"
        },
        create: {
            url: crudServiceBaseUrl + "/Products/Create",
            dataType: "jsonp"
        },
        parameterMap(data, type) {
            switch (type) {
                case 'read':
                    let request = {};
                    request.page = data.page - 1;
                    request.page_size = data.pageSize;
                    request.sort = data.sort;
                    request.filter = data.filter;

                    return JSON.stringify(request);
                case 'destroy':
                    return kendo.stringify(data.models);
                case 'update':
                    console.log("Data that that will be sent for updating: ", data.models);
                    return kendo.stringify(data.models);
                default:
                    break;
            }
        }
    },
    batch: true,
    pageSize: 20,
    schema: {
        model: {
            id: "ProductID",
            fields: {
            
            }
        }
    }
});
您可以查看这个官方示例,我只更改了更新时发送的第一个对象的
ProductName


我希望你能从中挽救一些东西,德国劳埃德船级社

保存更改事件就是您想要的事件。由于您使用的是mvc,您还可以通过执行
.Events(e=>e.SaveChanges“onGridSave”)
来设置网格其余部分的事件。然后onGridSave成为您定义的javascript函数

.Events()与.Pageable()或.Navigatable()处于同一级别

然后在javascript函数中,您可以执行如下操作:

function onGridSave(e){
   e.sender.dataSource._data[0].PropertyName = "new value/data manipulation"
}
PropertyName是要修改的模型属性。_数据[0]引用数据源中的第一个元素。您可能需要迭代或调整索引以到达要修改的行


已修改的行的.u数据[0].dirty属性将设置为true。只有dirty设置为true的元素才会传递给控制器

SaveChanges事件是处理此场景的正确事件吗?可能是,但如何在发送之前修改模型?如果事件参数上有
model
对象,请尝试更改它。
function onGridSave(e){
   e.sender.dataSource._data[0].PropertyName = "new value/data manipulation"
}