【问题标题】:How do I send a JSON data while deleting in JqGrid?在 JqGrid 中删除时如何发送 JSON 数据?
【发布时间】:2016-11-26 07:04:56
【问题描述】:

Jqgrid 内联编辑发送JSON 数据。但是内联删除发送FORMs data .我只需要使用 JSON 数据将数据发送到 Web 方法

这是我在网格中插入删除按钮的方式

colmodelMob 是我的colModel 数组

  colmodelMob.push(
                {
                    label: "Edit Actions",
                    name: "actions",
                    width: 100,
                    formatter: "actions",
                    formatoptions: {
                        keys: true,
                        editOptions: {},
                        addOptions: {},
                        delOptions: {}
                    }       
                }); 

这基本上是因为会弹出一个确认框,要求服务器确认行删除。但我不需要我的数据以 JSON 格式发送,否则它不会到达webmethod

【问题讨论】:

  • 请在所有您的问题中包含有关您使用的 jqGrid 版本的信息,以及 fork(free jqGrid、商业 Guriddo jqGrid JS 或旧 jqGrid 在版本
  • @Oleg im 使用旧的 jqgrid 版本 4.4.4 。它的免费版本(Trirand jqGrid)

标签: jquery asp.net jqgrid


【解决方案1】:

jqGrid 使用jQuery.ajax 与服务器通信。要以 JSON 格式发送数据,必须做两件事:

  1. 应该以 JSON 格式对数据进行编码。通常使用JSON.stringify 进行编码。
  2. 应该使用选项contentType 选项设置为"application/json""application/json; charset=utf-8" 值。它在请求中包含 HTTP 标头 ContentType。标头通知服务器,发送到服务器的数据以 JSON 格式编码。

也可以选择使用dataType: "json" 选项。如果 Ajax 调用的响应也应该包含 JSON 编码数据,则使用该选项。

现在关于在 jqGrid 内部实现上述要求。 jqGrid 可以在很多地方使用 jQuery.ajax。您使用 jqGrid 的复古版本 4.4.4。它的可能性要小得多,而且它是在非常旧的网络浏览器、旧的 jQuery 等时代开发的。我提醒您,在 jqGrid 4.4.4 发布之日,一个使用 Chrome 24、Firefox 18、Internet Explorer 10、Safary 6.0.2。 IE8(和 Internet Explorer)是桌面上最流行的网络浏览器(仅在 Windows 下)。现在可以与 Chrome 54、Firefox 50、Microsoft Edge 38 和 Internet Explorer 11、Safari 10 一起使用。您真的相信 jqGrid 4.4.4 可以很好地与现代网络浏览器一起使用吗?我强烈建议您更新到free jqGrid 的当前版本(4.13.5)。

如果你仍然必须使用 jqGrid 4.4.4 那么你应该使用

{
    label: "Edit Actions",
    name: "actions",
    width: 100,
    formatter: "actions",
    formatoptions: {
        keys: true,
        delOptions: {
            serializeDelData: function (postData) {
                return JSON.stringify(postData);
            },
            ajaxDelOptions: {
                contentType: "application/json"
            }
        }
    }
}

根据使用其他方法,必须在许多不同的地方设置delGridRow 的选项。问题是:一个人不仅直接使用delGridRow方法,而且间接使用。例如formatter: "actions"navGridinlineNav 使用内联编辑或表单编辑选项。您必须使用相应的深层选项来指定delGridRow 的自定义选项。免费的 jqGrid 有 jqGrid 选项,它允许为方法的所有间接调用指定公共选项。可以使用inlineEditingformEditingformDeletingformViewingsearching 来指定所有方法使用的默认选项。因此你可以使用 jqGrid 选项

inlineEditing: {
    keys: true
},
formDeleting: {
    serializeDelData: function (postData) {
        return JSON.stringify(postData);
    },
    ajaxDelOptions: {
        contentType: "application/json"
    }
}

之后,您可以删除formatter: "actions"formatoptions 属性。如果你使用navGrid,那么它在删除时也会使用相同的选项。

您可以在the wiki article 中阅读有关指定选项的新方法的更多信息。

顺便说一句,您可能会遇到内联编辑的严重问题。您可能应该使用 jqGrid 的 ajaxRowOptions 选项和 serializeRowData 回调在内联编辑期间进行 JSON 编码。免费的 jqGrid 支持相同的选项,并允许您在 inlineEditing 内另外使用 ajaxSaveOptionsserializeSaveData

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多