如果使用添加导航按钮添加行,如何传递其他POST键来添加控制器?
我尝试使用下面的代码来传递带有表单值的_dokdata,但是_dokdata没有传递给控制器 服务器
$("#grid").jqGrid('inlineNav', '#grid_toppager', {
addParams: {
useDefValues : true,
useFormatter : false,
addRowParams : {
extraparam : { _dokdata : FormData },
editData: { _dokdata: FormData },
},
editData: { _dokdata: FormData },
extraparam : { _dokdata : FormData },
},
add: true,
edit: false,
save: true,
cancel: true,
editParams : {}
});
function FormData() {
return JSON.stringify($("#_form").serializeArray());
}
答案 0 :(得分:4)
您所描述的问题似乎是代码中的小错误和jqGrid代码中的错误(请参阅以the place开头的行)。
您的代码中的问题是您没有像editParams
那样正确设置addParams
。正确的用法应该是:
$("#grid").jqGrid('inlineNav', '#grid_toppager', {
addParams: {
useDefValues: true,
addRowParams: {
keys: true,
extraparam: { _dokdata: FormData }
}
},
editParams: {
extraparam: { _dokdata: FormData }
},
add: true,
edit: false,
save: true,
cancel: true
});
function FormData() {
return JSON.stringify($("#_form").serializeArray());
}
当前版本的jqGrid代码中的问题在我看来是jqGrid中使用的
保存按钮(请参阅here)仅使用editParams.extraparam
的设置,而不是使用addParams.addRowParams.extraparam
之类的设置。我在keys: true
的{{1}}参数中添加了addParams.addRowParams
选项。因此,如果用户按 Enter 保存更改,您将看到jqGrid的当前实现(v 4.3.0)将使用inlineNav
并将使用addParams.addRowParams.extraparam
如果通过导航按钮的“保存”按钮保存行。
更新:我测试了代码并在jqGrid v.4.3.0中发现了另外一个错误。我在the feature request中建议引入editParams.extraparam
设置,可以像其他非常实用的设置$.jgrid.inlineEdit
一样使用,但是在内联而非表单编辑的情况下。功能请求已实现
在jqGrid 4.3.0中,但实现包含一个bug。
要修复错误,我们应该从
替换行33,117和304$.jgrid.edit
到
o = $.extend($.jgrid.inlineEdit, settings, args[0]);
如何从the demo看到,在修复错误后所有工作都正常。
更新2 :上述修复与the fix完全相同,但仍然不正确。要修复错误,必须在代码中进行更多更改。例如,可以从
更改行32-36(o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]);
内部)
editRow
例如以下
if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) {
o = $.extend($.jgrid.inlineEdit, settings, args[0]);
} else {
o = settings;
}
以同样的方式行116-120(if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) {
settings.keys = false; // keys is args[0] and it's an object
o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]);
} else {
o = settings;
}
内部)
saveRow
可以更改为
if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) {
o = $.extend($.jgrid.inlineEdit, settings, args[0]);
} else {
o = settings;
}
和第304行
if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) {
settings.successfunc = null; // successfunc is args[0] and it's an object
o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]);
} else {
o = settings;
}
可以更改为
o = $.extend($.jgrid.inlineEdit, settings, args[0]);
更新3 :我将my suggestion发布到trirand关于“删除”问题。请参阅使用修复程序here的相同演示。