1

編集可能な詳細テンプレートがある剣道グリッドがあります。詳細テンプレートには、複数選択があります。

保存するとき、dataItem を手動で更新して、詳細テンプレートの複数選択で最新のオプションを取得します。複数選択からデータを取得することに問題はありません。グリッドをトリガーして保存するまで、すべてが実際にはかなり良さそうに見えます。

次のコードを使用して、複数選択項目をグリッドの dataItem に追加します。

function SaveRefItemSubCategories() { //Called on Save button click
    var grid = $("#RefItemSubCategoryGrid").data("kendoGrid");

    for (var i = 0; i < grid.dataSource._data.length; i++) {
        var dataItem = grid.dataSource._data[i];
        dataItem.RefItemCategoryServiceIDs = [];
        var ms = $("#MultiSelect_" + dataItem.uid).data("kendoMultiSelect");
        var values = ms.value();

        for(var x = 0; x < values.length; x++) {
            dataItem.RefItemCategoryServiceIDs.push(values[i]);
        }
    }
    grid.dataSource.sync();
}

その時点で、サーバーに投稿されたものを見ると、シリアル化された複数選択項目のグリッドの dataSource は次のようになります。

モデル[0].RefItemCategoryServiceIDs[] 15

&models%5B0%5D.RefItemCategoryServiceIDs%5B%5D=15

次のようになります。

モデル[0].RefItemCategoryServiceIDs[ 0 ] 15

&models%5B0%5D.RefItemCategoryServiceIDs%5B 0 %5D=15

そこに余分なスペースがあり申し訳ありません。そうしないと太字にできませんでした

シリアル化されたデータに配列のインデックスがないため、サーバーにヒットしたときにそのプロパティが null になります。このプロパティのタイプは List です

私はいくつかの異なるアプローチを試しましたが、最初に保存した後に残って問題を引き起こす dataItem に新しいプロパティを作成することになります。

push() メソッドの代わりに使用したいくつかの例は次のとおりです。

  • これはデータを送り返しますが、既存のリストを無視し、配列インデックスごとに新しい dataSource プロパティを作成します。これは、1 回だけ保存する場合は機能しますが、グリッドを複数回保存すると、追加されたプロパティが残り、データの整合性が損なわれます。保存後に (グリッドをリロードせずに) dataSource を「リセット」する方法が可能であれば、このオプションを使用します。

    dataItem["RefItemCategoryServiceIDs[" + i + "]"] = 値[i];

  • これは、サーバー上のオブジェクトのプロパティがnullである.push()と同じ効果がありました

    dataItem.RefItemCategoryServiceIDs[i] = 値[i];

さらに情報を提供できるかどうかお知らせください。事前に感謝します。

4

1 に答える 1