1
  • jQuery 1.8.2でKendoUI バージョン2012.3.1114を使用しています。
  • 私は MVC4 を使用しており、メソッドはフェッチ時にコントローラーをスローし、ポスト用に API コントローラーをルーティングしています。これらは正しく機能しており、返されたエンティティに正しい入力値 (ID、送信者、件名) が含まれていることを確認しました。
  • 私は 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"
});

結果のスクリーンショットをいくつか示します。

成功した保存から返された結果は次のとおりです ここに画像の説明を入力

以下は、KendoUI が「success」を呼び出し、オブジェクトを jquery 遅延関数に渡した後の結果のスクリーン ショットです (モデルIDが null であることに注意してください)。

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

ここに画像の説明を入力

驚いたことに、キーボードに頭をぶつけても、キーボードが痛むだけです....どんなポインタでも大歓迎です!

4

1 に答える 1

1

問題は、スキーマの定義方法でした。スキーマデータの結果を「データ」として返すように設定したので、以下で説明します。バインディングが機能するには、すべての結果が同じ方法で返される必要があります。

    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
    });
}
于 2012-11-17T22:29:32.170 に答える