2

MVC3 アプリケーションで Kendo UI グリッドを使用していますが、非常に満足しています。以下の抜粋の Telerik 提供の例を使用して、グリッドの DataSource ally によって投稿されたデータをフォーマットしていますが、すべて問題ありません。ただし、このようなコードに依存する必要はありません。「トランスレータ」なしで Kendo と MVC を会話させたいと思います。つまり、次のコードです。

parameterMap: function(data, operation) {
    var result = { };
    for (var i = 0; i < data.models.length; i++) {
        var model = data.models[i];
        for (var member in model) {
            result["models[" + i + "]." + member] = model[member];
        }
    }
    return result;
}

この関数は、dataKendo が ajax する前に操作できるようにする「フック」です。デフォルトでは、Kendo DataSource は content-type フォーム エンコードを送信しますが、MVC モデル バインダーには適していません。これがなくても、FormCollection を使用して独自のバインディングを行うことはできますが、それは有効ではありません。

JSON を送信するように を構成しDataSource、マッピング関数を次のように変更すると、

parameterMap: function(data, operation) {
    return JSON.stringify(data);
}

リクエストで次のデータが送信されますが、MVC をこれにバインドする方法がわかりません。今のところ私の唯一の希望は、アクション メソッドで Request.Params[0] を取得し、この JSON を自分で逆シリアル化することです。

この時代では、2 つの HTTP エンドポイントが JSON を使用して適切に通信するために、コードを記述する必要はないと思います。私は何を間違っていますか、または私の側、つまりリクエストの受信者で何を見なければなりませんか。私は、クライアント側での介入を最小限に抑えて、stringify電話をかけることを本当に望んでいます。

4

1 に答える 1

1

これはかなり古い質問なので、これがまだ問題であるかどうかはわかりませんが、jsonデータをコントローラーに送信するシナリオがあり、名前が何であるかについての「ヒント」を与える必要がありました。モデルバインディングは正しく機能します:

public JsonResult GetDatByIds([Bind(Prefix="idList[]")]List<Guid> idList)

私のシナリオでは、剣道は私のデータをシリアル化idList[]し、フォームの投稿で単なるではなく名前を付けていましたidList。モデルバインディングのヒントを与えると、それは魅力のように機能しました。これは、シナリオでも同じである可能性があります。

于 2012-10-13T03:35:52.903 に答える