使用jqGrid(5.1.1)进行内联编辑时,id参数不包含在POST数据中

时间:2016-11-20 18:12:42

标签: jquery jqgrid

我的配置包括每行中的操作按钮: jqgrid row with action buttons

$(document).ready(function () {
        $("#jqGrid").jqGrid({
                url: 'path_url?action=ajax.load',
                editurl: 'path_url',
                datatype: "json",
                colModel: [ {
                        label: 'Actions',
                        width: '10em',
                        formatter: 'actions',
                        editable: false,
                        sortable: false
                }, {
                        label: 'Network',
                        name: 'network',
                        width: '20em',
                        key: true,
                        editable: true,
                        editrules : { required: true}
                }, {
                        ...
                }, {
                        label: 'Comment',
                        name: 'comment',
                        editable: true,
                        sortable: false
                } ],
                autowidth: true,
                gridview: true,
                prmNames: { oper: "action",
                        editoper: "ajax.update",
                         addoper: "ajax.add",
                         deloper: "ajax.delete"
                },
                sortname: 'network',
                sortorder : 'asc',
                viewrecords: true,
                height: 'auto',
                rowNum: 10000,
                pager: "#jqGridPager"
        });
        ...

点击删除按钮时,POST数据包含要删除的记录的“ id = ”:

vars {
  action        = 'ajax.delete'
  id            = '129.186.0.0'
}

当编辑按钮用于编辑行时,使用保存按钮时,POST数据不包含它,我只获得新值:

vars {
  action        = 'ajax.update'
  comment       = 'note goes here'
  netmask       = '255.255.0.0'
  nettype       = '1'
  network       = '1.4.0.0'
}

  id            = '192.188.159.0'    /* missing! the old value of the key field */

我能够在saveRow()中破解来源“修复”这个(在第12206行):

if(tmp) {
    tmp[opers.oper] = opers.editoper;
    tmp[opers.id] = oldRowId;               /* added, --john */
    if (tmp[idname] === undefined || tmp[idname]==="") {
        ...

但肯定有一种正确的方法可以解决这个问题吗?

FWIW,当使用网格底部的编辑和删除按钮时,会包含id字段: jqgrid bottom buttons

1 个答案:

答案 0 :(得分:0)

根据@ Oleg的评论,答案如下:

我的数据来源未包含 id 字段:

"rows": [
    {"network": "1.2.0.0", "netmask": "255.255.0.0", "nettype": "1", "comment": "huh" },
    ...
]

有两个修复方法。一种是按照建议包含jsonReader: { id: "network" }选项,它将合成id。另一种方法是修复数据源以包含id:

"rows": [
    {"id": "1.2.0.0", "network": "1.2.0.0", "netmask": "255.255.0.0", "nettype": "1", "comment": "huh" },
    ...
]

在这两种情况下,都不再需要key: true选项。

[编辑] 注意:拥有一个不可变的 id 是一件好事,(而不是影响可编辑字段的那个) ) - 在这种特殊情况下,这不是我可以使用的东西。