如何在免费 jqgrid 中添加新行后从服务器设置行 ID

How to set row id from server after adding new row in free jqgrid

如果使用表单编辑添加新行,保存到服务和服务器 returns 自动生成行 ID,免费 jqgrid 不会设置行 ID。 后续编辑添加的行会导致错误。

我使用下面的代码尝试了 github 的免费 jqgrid,但问题仍然存在。

要复制,请在浏览器中打开下面的页面,单击加号按钮添加行并提交然后取消 ID 列为空。代码包含:

           afterSubmit: function (response, postdata) {
               return [true, '', '100'];

模拟服务器响应返回远程 ID 100。 所以Id列在添加后应该包含vlaue 100。

我也在 github 中将其作为免费的 jqgrid 问题发布,但没有得到任何回复。 如何修复它以便可以使用表单编辑添加行?

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <link rel="stylesheet" type="text/css" href="http://code.jquery.com/ui/1.11.4/themes/redmond/jquery-ui.css"/>
    <link rel="stylesheet" type="text/css" href="http://cdn.jsdelivr.net/free-jqgrid/4.8.0/css/ui.jqgrid.css"/>
    <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
    <script type="text/javascript" src="http://cdn.jsdelivr.net/free-jqgrid/4.8.0/js/i18n/grid.locale-en.js"></script>
    <script type="text/javascript">
        $.jgrid = $.jgrid || {};
        $.jgrid.no_legacy_api = true;
        $.jgrid.useJSON = true;
    </script>
<script src="http://rawgit.com/free-jqgrid/jqGrid/master/js/jquery.jqgrid.src.js"></script>
    <script type="text/javascript">
        $(function () {
            "use strict";
            var mydata = [
                ],
                $grid = $("#list");

            $grid.jqGrid({
                datatype: "local",
                data: mydata,
                colNames: ["Client", "Id"],
                colModel: [
                    { name: "name", align: "center", editable: true },
                    { name: "id" }
                ],
                iconSet: "fontAwesome",
                pager: "#pager",
                gridview: true,
                autoencode: true,
                ignoreCase: true,
                onSelectRow: function (rowid) {
                    var $self = $(this),
                        savedRow = $self.jqGrid("getGridParam", "savedRow");
                    if (savedRow.length > 0) {
                        $self.jqGrid("restoreRow", savedRow[0].id);
                    }
                    $self.jqGrid("editRow", rowid, {
                        keys: true
                    });
                }
            })

.jqGrid('navGrid', {}, {},
{
}
})
;

        });
    //]]>
    </script>
</head>
<body>
    <table id="list"><tr><td></td></tr></table>
    <div id="pager"></div>
</body>
</html>

谢谢!这是 jqGrid 4.7 中的错误,请参阅 the line:

idname = url === 'clientArray' ? $t.p.keyName : opers.id;

免费的jqGrid是基于jqGrid 4.7的,所以也有同样的问题。我刚刚发布 the fix,将上面的行更改为以下内容

idname = url === "clientArray" && p.keyName !== false ? p.keyName : opers.id;

现在问题应该解决了。