私はjqGridを使用しており、インライン編集と行追加を行っています。サーバー側のコードにJavascriptとC#を使用したMVCを使用して、クライアント側ですべてをセットアップしています。インラインの保存および行の追加関数がサーバーから返される場合を除いて、すべてが正常に機能しているようです。保存が失敗したりエラーが発生したりした場合、クライアントは応答を認識していないようです。afterSubmit、afterSaveなどを処理するためにいくつかの基本的な関数を設定しましたが、それが機能する唯一のインスタンスは更新アクションです。行を編集または追加するたびに、応答が戻ってこないように見え、グリッドが更新されません。
これで見つけたものはすべて、これを処理するためのグリッドの基本的な設定ですが、適切な応答が返されないか、一部の関数が正しく設定されていない可能性があります。私はこことTrirandのフォーラムでwikiのドキュメントといくつかの投稿を読みましたが、情報にギャップがあり、同じ問題が残っています。
明確にするために、手動更新などと同様に、編集と追加は正常に機能します。唯一の問題は、サーバーからの応答を返し、編集が完了した後にグリッドにデータを再ロードすることです。
これは、グリッドと関数に関連する私のクライアントコードです。
私のAfterFunctions:
var actionAfterSubmit = function (response, postdata) {
var res = response.responseText;
alert('In actionAfterSubmit');
return [true, ''];
};
var actionbeforeSubmit = function (response, postdata) {
//var res = response.responseText;
alert('In beforeSubmit');
return true;
};
var actionAfterSave = function (rowid, response) {
alert('In actionAfterSave');
};
var actionErrorFunc = function (rowid, response) {
alert('In actionErrorFunc');
};
var actionSuccessFunc = function (response) {
alert('In actionSuccessFunc');
return true;
};
私のグリッド:
jQuery("#list").jqGrid({
url: ServiceURL + '/Controller/GetDataAction', //URL that loads data including search functionality
datatype: 'json',
mtype: 'GET',
postData: { tableName: t_Name },
editData: { tableName: t_Name },
colModel: col_model, //col_model is passed as parameter
pager: jQuery('#pager'), //sets pager name
rowNum: 20, //default number of rows
rowList: [10, 20, 50, 100], //number of row options
sortname: 'id', //sorting columns
sortorder: "asc", //sorting order
viewrecords: true,
altRows: true, //enables different styling for alternate rows
altclass: 'myAltRowClass', //Alternate row styling
width: "100%",
height: "100%",
caption: '',
navigator: true, //enables navigator toolbar
multipleSearch: true, //enables multiple search features
multipleGroup: true, //enables grouping in multiple search
editurl: ServiceURL + '/Controller/GridSaveAction' //URL that handles edit (insert & update) }); var editOptions = {
width: 400,
height: 'auto',
addCaption: "Add Record",
editCaption: "Edit Record",
bSubmit: "Submit",
bCancel: "Cancel",
bClose: "Close",
saveData: "Data has been changed!",
bYes: "Yes",
bNo: "No",
bExit: "Cancel",
recreateForm: true,
url: ServiceURL + '/ICMP/MapTable/GridSave/',
reloadAfterSubmit: true,
closeOnEscape: true,
closeAfterEdit: true,
viewPagerButtons: false,
afterSubmit: actionAfterSubmit,
afetrsavefunc: actionAfterSave,
reloadAfterSubmit: true,
datatype: 'json'
};
マイパラメータとその他のグリッド設定:
var addOptions = {
afterSubmit: actionAfterSubmit,
aftersavefunc: actionAfterSave,
errorfunc: actionErrorFunc,
successfunc: actionSuccessFunc,
afterComplete: refreshTableAfterAddOrEdit,
reloadAfterSubmit: true
};
var addParameters = {
useFormatter: true,
defaultValue: "",
useDefValues: true,
initdata: { tableName: t_Name },
addRowParams: editOptions,
reloadAfterSubmit: true };
var inlineParameters = {
edit: false,
editicon: "ui-icon-pencil",
save: false,
saveicon: "ui-icon-disk",
cancel: false,
cancelicon: "ui-icon-cancel",
add: true,
addicon: "ui-icon-plus",
addParams: addParameters,
editParams: editOptions,
reloadAfterSubmit: true,
restoreAfterSelect: false
};
jQuery("#list").jqGrid('navGrid', '#pager', { view: true, edit: true, add: false, del: false, refresh: true, search: true }, editOptions, addParameters, {}, searchOptions, viewOptions);
jQuery("#list").jqGrid('inlineNav', '#pager', inlineParameters);
jQuery("#list").jqGrid('filterToolbar', {
stringResult: true, searchOnEnter: false, defaultSearch: "cn",
beforeSearch: function() {
$("#list").setGridParam({ postData: { _search: true, tableName: t_Name } });
}
});
jQuery("#list").jqGrid('addRow', {
useFormatter: true,
useDefValues: true,
initdata: { tableName: t_Name },
addRowParams: addParameters
});
これは私のコントローラーです
public JsonResult GridSaveAction(string id, jqGridMapTableModel MapRecord, string tableName, FormCollection formCollection, string someVal)
{
//Does some things
try
{
//Sets up update
success = DataAccessObject.Update(Query, myParameters); //Runs the update and returns true if success or false if it failed
}
catch (Exception ex) {
return Json(ex.Message);
}
return Json(success ? "Operation succesful." : "Operation failed.");
}
私は見つけることができるすべてを試してきましたが、何も機能せず、コードの一部が間違っていると思います。
どんな助けでも大歓迎です!