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

问题描述:

jQgrid行是使用内联编辑模式编辑的。 按Enter使用http POST将数据发送到服务器。 POST方法返回状态400错误的请求,如果有一些错误。下面的代码中的errorofunc在此 的情况下显示错误。 用户更正行中的数据,然后再次按下。jqGrid内联编辑:如果发布返回错误,如何再次保存

按回车被忽略,没有任何反应。如果返回404错误,它看起来像回车键没有绑定。 编辑行中的更改丢失,无法保存。

我试图设置在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> 

UPDATE:errrofunc调用editrow这 根据 https://github.com/tonytomov/jqGrid/blob/master/js/grid.inlinedit.js 应该设置再次输入键保存。 由于不明原因,这不会发生 。

更新:在errorfunc网格。根据奥列格注释改为

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

可以使用可变griderrorfunc实现(grid.restoreAfterErorr)内。 gridundefined,你有排除异常。

修订:欧应更换alert(response.responseText);

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

看到同样风格的对话框,在标准情况下。内联编辑中的errorfunc负责显示错误消息本身。

+0

@Oleg:谢谢。我通过将'grid'更改为'$(“#grid”)'来更新测试用例。问题依然存在。为了测试这个,你可以使用我发给你的私人测试网址。首先输入30个以上的字符(Allikas)列并按回车。出现错误消息。编辑Allikas列以少于30个字符并再次按Enter键。此输入按下将被忽略,数据不会被保存。错误后如何保存数据?顺便说一句。对于未知的理由,即使网格。被使用,在网格中不会发生异常。线。数据库出现错误的适当警报框仍然出现。 – Andrus 2011-06-03 07:04:02

+0

@安德鲁斯:你可以将'jquery.jqGrid.min.js'替换为'jquery.jqGrid.src.js'吗? – Oleg 2011-06-03 07:26:22

+0

@安德鲁斯:我似乎开始明白你的网站有什么问题。你太频繁地进入编辑模式。例如在'errorfunc'里面你不应该调用'invokeEditRow'。此外,似乎如果按Enter键保存该行,则不仅保存该行,而且还会接收'keypress'事件以开始内联编辑(请参阅'bindKeys'),这会对非常陌生的行为产生影响。 – Oleg 2011-06-03 07:51:32