我有一个剑道网格,我有一个可编辑的细节模板。在详细信息模板中,我有一个多选。
保存时,我手动更新 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();
}
那时,当我查看发布到服务器的内容时,网格的数据源对于序列化的多选项目如下所示:
模型[0].RefItemCategoryServiceIDs[] 15
&models%5B0%5D.RefItemCategoryServiceIDs%5B%5D=15
它应该如下所示:
模型[0].RefItemCategoryServiceIDs[ 0 ] 15
&models%5B0%5D.RefItemCategoryServiceIDs%5B 0 %5D=15
抱歉,那里有多余的空间,否则我无法将其加粗
序列化数据中缺少数组索引会导致该属性在访问服务器时为空。此属性的类型是列表
我尝试了几种不同的方法,但最终在我第一次保存后在 dataItem 上创建了新的属性并导致问题。
我用来代替 push() 方法的一些示例是:
这个确实会发回数据,但它会忽略现有列表并为每个数组索引创建一个新的 dataSource 属性。如果我只保存一次,这将起作用,但如果我多次保存网格,那么添加的属性会一直存在并破坏数据完整性。如果保存后可以“重置”数据源(无需重新加载网格),我会接受此选项。
dataItem["RefItemCategoryServiceIDs[" + i + "]"] = values[i];
这与 .push() 具有相同的效果,它是我在服务器上的对象的属性为 null
dataItem.RefItemCategoryServiceIDs[i] = values[i];
如果我可以提供更多信息,请告诉我,并提前致谢!