jqGrid内联编辑:如果post返回错误,如何再次保存

时间:2011-06-02 16:57:04

标签: jquery jqgrid

使用内联编辑模式编辑jQgrid行。 按Enter键使用http POST将数据发送到服务器。 如果出现错误,POST方法返回状态400 Bad Reguest。下面的代码中的errorofunc显示错误 案件。 用户纠正行中的数据并再次按下输入。

忽略输入,没有任何反应。如果返回404错误,则看起来Enter键未绑定。 已编辑行的更改将丢失,无法保存。

我尝试在errorfunc中设置

restoreAfterError = false; grid.restoreAfterErorr = false;

但错误后仍然无法再保存行。

如何在返回400错误后允许保存正确的行数据?

<script type="text/javascript">
var lastSelectedRow;
$(function () {
            var grid = $("#grid");
            grid.jqGrid({
                url: '/Grid/GetData',
                datatype: "json",
                mtype: 'POST',
                scroll: 1,
                multiselect: true,
                multiboxonly: true,
                scrollingRows : true,
                autoencode: true,
                colModel: [
        { name: 'Source', fixed: true, editable: true, width: 30 },
        { name: 'Est', fixed: true, editable: true, width: 271 },
        { name: 'Istopic', fixed: true, editable: true, width: 57 },
        {name: 'Critical', fixed: true, editable: true, width: 50}
    ],

                gridview: true,
                pager: '#pager',
                sortname: 'est',
                viewrecords: true,
                rowNum: 30,
                sortorder: "asc",
                editurl: '/Grid/Edit'
            });

            $("#grid").jqGrid('bindKeys', {
                onEnter: function(rowid) {
                    doeditRow(rowid);
                }
            }  );

        });

        function doeditRow(rowID) {
            var grid2 = $("#grid");
            if (rowID && rowID !== lastSelectedRow) {
                grid2.jqGrid('restoreRow', lastSelectedRow);
                lastSelectedRow = rowID;
            }
            invokeEditRow();
        }

        function errorfunc(rowID, response) {
            // todo: why this does not allow Enter key to continue ase after error:
            restoreAfterError = false;
            $("#grid").restoreAfterErorr = false;
            alert(response.responseText);
            lastSelectedRow = rowID;
            invokeEditRow();
            return true;
        }


        function invokeEditRow() {
             $("#grid").jqGrid('editRow', lastSelectedRow ,true,null, null, null, {},
                 null,
                 errorfunc
             );
        }
    </script>

<div id="grid1container" style="width: 100%;">
    <table id="grid">
    </table>
    <div id="pager">
    </div>
</div>
  

更新:errrofunc调用editrow   根据   https://github.com/tonytomov/jqGrid/blob/master/js/grid.inlinedit.js   应该再次设置回车键以保存。   由于未知原因,这不是   发生。

更新:在errorfunc网格中。改为

        $("#grid").restoreAfterErorr = false;

根据奥列格评论

1 个答案:

答案 0 :(得分:1)

您在grid实施(errorfunc)中使用变量grid.restoreAfterErorrgridundefined,你在行中有异常。

更新:您应将alert(response.responseText);替换为

$.jgrid.info_dialog($.jgrid.errors.errcap,'<div class="ui-state-error">'+
    response.responseText +'</div>', $.jgrid.edit.bClose,{buttonalign:'right'});

查看与标准案例中相同的样式对话框。内联编辑中的errorfunc负责显示错误消息本身。