web api 2密钥增量补丁更新

时间:2014-06-22 20:31:55

标签: asp.net-web-api kendo-datasource asp.net-web-api-odata

在这里使用le framework

http://blog.longle.net/2014/03/04/harness-the-power-of-asp-net-mvc-web-api-odata-kendo-ui-requirejs-to-build-an-easy-maintainable-spa-for-the-net-developer-published/

在这里

Web API + OData - PATCH request 400 error

如何在WebAPI 2 odata的补丁更新中发送密钥增量,其中kendo数据源"批处理:true"

AcceptVerbs("PATCH", "MERGE")]
public async Task<IHttpActionResult> Patch([FromODataUri] int key, Delta<Company> patch)

钥匙总是空的!!!

剑道支持WebAPI odata吗?

1 个答案:

答案 0 :(得分:0)

由于这是一项非常具体的任务,我只对上面提到的链接中显示的Le框架提供的Repository Pattern进行了一次调整。

define(['kendo', 'testModel'],
function (kendo, testModel) {
    var svcUrl = '/odata/modelURL';
    var ds_test = new kendo.data.DataSource({
        type: 'odata',
        transport: {
            read: {
                //async: false,
                url: svcUrl,
                dataType: 'json'
            },
            update: {
                url: function (data) {
                    return svcUrl + '(' + data.models[0].ID + ')';
                },
                dataType: 'json',
                type: 'PATCH'
            },
            create: {
                url: function (data) {
                    return svcUrl + '(' + data.models[0].ID + ')';
                },
                dataType: 'json',
                type: 'PATCH'
            },
            destroy: {
                url: function (data) {
                    return svcUrl + '(' + data.models[0].ID + ')';
                },
                dataType: 'json',
                type: 'PATCH'
            },
            parameterMap: function(data, operation) {
                if (operation != 'read') {
                    var model = kendo.stringify(data.models[0]);
                    return model;
                };
                return data.models;
            }
        },
        batch: true,
        serverPaging: true,
        serverSorting: true,
        serverFiltering: true,
        pageSize: 10,
        schema: {
            data: function (data) { return data['value']; }, //{ return data.value; },
            total: function (data) { return data['odata.count']; },
            model: testModel
            //parse: function(response) {
            //    var f = ds_appl_home.options.schema.model.fields;
            //    $.each(response, function (key, value) {
            //        if (!(key.toString() in f)) {
            //            delete response[key];
            //        }
            //    });
            //    return response;
            //}
        },
        error: function (e) {
            ...
        }
    });
    return ds_test;
});