編集可能な詳細テンプレートがある剣道グリッドがあります。詳細テンプレートには、複数選択があります。
保存するとき、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];
さらに情報を提供できるかどうかお知らせください。事前に感謝します。