KendoGrid UI - 返回保存的实体不会将PK值绑定到网格

时间:2012-11-17 21:21:42

标签: jquery asp.net-mvc kendo-ui

  • 我正在使用 jQuery 1.8.2 处理KendoUI版本 2012.3.1114
  • 我正在使用MVC4,我的方法是在fetch和API Controller上发布一个Controller来发布。这些工作正常,我已经验证返回的实体包含正确的填充值(Id,Sender,Subject)
  • 我没有使用MVC剃须刀版本。

问题

我遇到的问题是我的对象已保存并正确返回,但是当它通过“options.success”方法上的kendo.web.min.js文件传递时,模型似乎不会填充具有新值的Id字段。

这是与KendoGrid一起使用的js

dataSource = new kendo.data.DataSource({
        transport: {
            read: function (options) {
                $.ajax({
                    dataType: 'json',data: options.data, url: 'messagesfetchmessages', cache: false,
                    success: function (result) {   
                        options.success(result);
                    }
                });
            },
            create: function (options) {
                options.data.Id = 0;
                debugger
                $.ajax({
                    dataType: 'json',data: options.data,type: "POST",url: '/api/messages',cache: false,
                    success: function (result) {
                        //var model = kendo.stringify(result)
                        debugger
                        options.success(result);
                    },
                    error: function (result) {
                        options.error(result);
                    }
                });
            },
        },
        batch: true,
        pageSize: 30,
        schema: {
                    data: "data",
            model: {
                id: "Id",
                fields: {
                    Id: { editable: false, nullable: true },
                    Sender: { validation: { required: true } },
                    Subject: { validation: { required: true } },
                }
            }
        }
});


$("#grid").kendoGrid({
    dataSource: dataSource,
    pageable: true,
    height: 400,
    toolbar: ["create"],
    columns: [
        { field: 'Id', width: "10px" },
        { field: 'Sender', width: "50px" },
        { field: 'Subject', width: "50px" }
        { command: ["edit", "destroy"], title: " ", width: "210px" }],
    editable: "popup"
});

以下是结果的几个屏幕截图:

以下是成功保存返回的结果 enter image description here

以下是KendoUI调用“success”并将对象传递给jquery延迟函数后的结果的屏幕截图(注意模型 Id 为null):

success: function (t) {
    e.resolve({
        response: t,
        models: n,
        type: i
    })
},

enter image description here

令人惊讶的是,敲击键盘只会伤害键盘......任何指针都会非常感激!

1 个答案:

答案 0 :(得分:1)

问题最终是如何定义架构。由于我在下面将schema data results设置为“data”。必须以相同的方式返回所有结果才能使绑定生效。

    var schema  = {
        data: "data",
        total: 'total',
        model: MessageModel,
        //http://docs.kendoui.com/api/framework/datasource#schema-object
        errors:  function(e,a,b) {                    
            if(e && e.responseText){
                alert(e.responseText);
                debugger
            }
        },
        parse: function(response) {
            if(!response.total){
                debugger
            }
            //response.data.DateCreated = new Date();
            return response;
        },
        batch: false,
        gridcolumns: columns
    }

因此,在帖子的成功函数中,代码如下所示:

success: function (result) {
    options.success({
        data: result
    });
}