在单页 MVC 中删除多个 jqGrid

delete on multiple jqGrids in singe page MVC

我在一个视图中有两个 jqGrids。我加载这些网格没有问题,但是当我尝试从 grid1 中删除记录时,它被发布到 grid2 删除方法中设置的 URL。

我使用下面的代码删除两个 jqGrids 中的行。

$.extend($.jgrid.del, {
    mtype: "DELETE",
    serializeDelData: function () {
        return ""; // don't send and body for the HTTP DELETE
    },
    onclickSubmit: function (params, postdata) {
        params.url = 'url' + postdata;
    },
    afterComplete: function (response, postdata, formid) {
    }
});

我写了两个单独的方法来从各自的网格中删除,两种方法都像上面那样。

请告诉我如何对两个 jqgrids 执行删除操作。

我认为删除 grid1 中行的扩展方法被 grid2 扩展方法加载过载。

$.jgrid.del 定义了页面上所有 jqGrids 使用的 defaults$.extend 只是将参数的属性(mtypeserializeDelDataonclickSubmitafterComplete)与可能存在于 [= 中的同名属性相结合14=]。因此 jqGrid 使用对象 $.jgrid.del 不是在创建网格期间,而是在执行删除操作期间 然后代码像

$.extend($.jgrid.del, {...}); // first settings
$("#grid1").jqGrid({
    ...
}).jqGrid("navGrid");
$.extend($.jgrid.del, {...}); // the second settings
$("#grid2").jqGrid({
    ...
}).jqGrid("navGrid");

将仅使用 $.jgrid.del 的第二个设置

因此您应该使用$.extend($.jgrid.del, {...});设置页面上的常用默认值并单独设置其他参数:

$.extend($.jgrid.del, {
    mtype: "DELETE",
    serializeDelData: function () {
        return ""; // don't send and body for the HTTP DELETE
    }
});
$("#grid1").jqGrid({
    ...
}).jqGrid("navGrid", ....., { /*Del options*/
    onclickSubmit: function (params, postdata) {
        params.url = 'url1' + postdata;
    }
});
$("#grid2").jqGrid({
    ...
}).jqGrid("navGrid", ....., { /*Del options*/
    onclickSubmit: function (params, postdata) {
        params.url = 'url2' + postdata;
    }
});

如果你使用free jqGrid fork, which I develop, then you can specify Delete parameters inside of formDeleting option of jqGrid. Additionally, free jqGrid supports functions as the value of url (see 了解更多细节),你可以重写上面的代码如下

$.extend($.jgrid.del, {
    mtype: "DELETE",
    serializeDelData: function () {
        return ""; // don't send and body for the HTTP DELETE
    }
});
$("#grid1").jqGrid({
    ...
    formDeleting: {
        url: function (rowid) {
            return "url1/" + rowid;
        }
    }
}).jqGrid("navGrid");
$("#grid2").jqGrid({
    ...
    formDeleting: {
        url: function (rowid) {
            return "url2/" + rowid;
        }
    }
}).jqGrid("navGrid");

当然,如果您在每个网格中将 editurl 设置为基数 URL,那么您可以从 url 函数访问它并重写代码如下

$.extend($.jgrid.del, {
    mtype: "DELETE",
    serializeDelData: function () {
        return ""; // don't send and body for the HTTP DELETE
    },
    url: function (rowid, postData, options) {
        return options.url + rowid;
    }
});
$("#grid1").jqGrid({
    ...
    editurl: "url1/"
}).jqGrid("navGrid");
$("#grid2").jqGrid({
    ...
    editurl: "url2/"
}).jqGrid("navGrid");