【问题标题】:Reset again and persist the data of JqGrid Row in Editable mode when some error return from Server当服务器返回一些错误时,再次重置并以可编辑模式保存 JqGrid Row 的数据
【发布时间】:2016-01-22 16:34:45
【问题描述】:

enter image description hereIn "successfunc" else 部分应该在可编辑模式下保留该行...

 var editparameters= {
                    "keys": true,
                    "oneditfunc": function () {
                        debugger;
                        $("select#" + arrprimarykey + "_StateName").val(rowData.StateCode);
                    },
                    "successfunc": function (data) {
                        debugger;
                        var msg = JSON.parse(data.responseText).Message;
                        var msgType = JSON.parse(data.responseText).MsgType;
                        if (msgType == "S") {
                            alert(msg);
                            $(CityMaster.idGrid).jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid');
                        } else {
                            alert(msg)
                           HERE RESTORE TO INLINE EDITABLE MODE THE ROW ,AGAIN IF ERROR RETURN FROM SERVER
                        }
                    },

                    "url": CityMaster.EditUrl,
                    "extraparam": {},
                    "aftersavefunc": function (data) {
                        debugger;
                    },
                    "errorfunc": null,
                    "afterrestorefunc": function (data) {
                        debugger;
                        $(CityMaster.idGrid).jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid');
                    },
                    "restoreAfterError": true,
                    "mtype": "POST"
                }
                jQuery(CityMaster.idGrid).jqGrid('editRow', arrprimarykey, editparameters);

在 "successfunc" 中,else 部分应将行保留为可编辑模式...

【问题讨论】:

    标签: jqgrid jqgrid-asp.net mvcjqgrid


    【解决方案1】:

    jqGrid中报错的标准方式是设置一个HTTP响应的错误状态码。如果将强制执行errorfunc,例如在使用内联编辑的情况下。如果服务器代码 无法 设置 HTTP 响应的错误状态代码,那么 jqGrid 提供了一个替代方案。回调successfunc 可用于检查服务器的响应。 successfunc 应该通知 jqGrid 现在响应是否成功。如果响应成功,回调successfunc 应该返回数组[true],如果出现错误,则返回包含两个元素的数组:[false, "error message to display the user"]。回调successfunc 通常从服务器的响应中获取错误消息。

    更新:您应该使用restoreAfterError: false(请参阅当前代码中的"restoreAfterError": true)来防止在开始内联编辑之前恢复行的状态。

    【讨论】:

    • 你的意思是这样的:if (msgType == "S") { alert(msg); $(CityMaster.idGrid).jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid'); } 其他 { 警报(味精);返回[假,味精]; }
    • @shyamshankar:几乎是这样,但是您需要对上面的代码进行一些更改。首先你应该明白.trigger('reloadGrid')同步工作,所以你上面的代码将开始并可能首先处理网格的重新加载,然后从.trigger('reloadGrid')返回并继续当前执行。我建议您永远不要在代码中直接使用.trigger('reloadGrid'),而是将其包装在setTimeout 中。它将允许处理当前回调直到结束,然后才开始处理.trigger('reloadGrid')
    • @shyamshankar:相应的代码可能类似于:if (msgType == "S") { alert(msg); setTimeout(function () {$(CityMaster.idGrid).jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid');}, 0); return [true]; } else { alert(msg); return [false, msg]; } 例如,您可以将setTimeout 的第二个参数从0 替换为50,但0 应该已经可以工作了。此类代码返回[true][false, msg],处理successfunc 直到结束,然后才启动setTimeout,这将触发reloadGrid。
    • 我想将我的 JQGrid Row 设置为 INLINE 可编辑模式,当 msgType 从 SERVER 返回非“S”时。
    • @shyamshankar:我看到你在代码中犯了小错误。您使用restoreAfterError: true 而不是restoreAfterError: false。这正是通知 jqGrid 从行中恢复旧值(开始内联编辑之前的状态)或在显示错误消息后保持内联编辑的设置。您必须将 successfunc 的正确实现(在错误的情况下返回 [false, msg])与选项 restoreAfterError: false 结合起来。
    猜你喜欢
    • 1970-01-01
    • 2013-06-25
    • 2016-08-29
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 2017-10-06
    相关资源
    最近更新 更多