【问题标题】:jqGrid Delete a RowjqGrid 删除一行
【发布时间】:2011-05-25 09:41:55
【问题描述】:

我已经创建了我的网格并希望使用网格的默认行为来删除一行。

这是我的网格设置代码:

$("#grid").jqGrid('navGrid', '#grid_pager',
    { add: true, addtitle: 'Add Customer', 
      edit: true, edittitle: 'Edit Customer',
      del: true, deltitle: 'Delete Customer', 
      refresh: true, refreshtitle: 'Refresh data',
      search: true, searchtitle: 'Advanced search filters', 
      addfunc: addReferent, editfunc: editReferent
    },
    {}, // default settings for edit
    {}, // default settings for add
    { // define settings for Delete 
        mtype: "post", 
        reloadAfterSubmit: true,
        url: wsBaseUrl + 'CustomerService.asmx/DeleteCustomer',
        resize: false,
        serializeDelData: function(postdata) {
            return JSON.stringify({ customerID: postdata.id });
        }
    },
    { // define settings for search
        closeOnEscape: true, multipleSearch: true, closeAfterSearch: true 
    }, 
    {}
);

这是在服务器上定义的网络服务方法

[WebMethod]
public OperationResult Deletecustomer(string customerID)
{
}

但不幸的是,当我单击删除按钮并在确认窗口上单击确定时,我收到一条错误消息 404。如下图所示

我做错了什么?

编辑:

我已将以下代码添加到我的 jqGrid 初始化中

// Set defaults value for jqGrid
$.jgrid.defaults = $.extend($.jgrid.defaults, {
    mtype: 'post',
    datatype: 'json',
    jsonReader: {
        root: "d.Rows",
        page: "d.Page",
        total: "d.Total",
        records: "d.Records",
        repeatitems: false,
        userdata: "d.UserData",
        id: "Id"
    },
    ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
    serializeGridData: function (postData) {
        return JSON.stringify(postData);
    },
    ajaxDelOptions: { contentType: 'application/json; charset=utf-8' },
    serializeDelData: function (postData) {
        return JSON.stringify(postData);
    },
    loadui: "block",
    multiboxonly: true,
    rowNum: 25,
    rowList: [25, 50, 100],
    altRows: true,
    altclass: 'ui-priority-secondary',
    autoencode: true,
    autowidth: true,
    rownumbers: true,
    rownumWidth: 30,
    gridview: true,
    hoverrows: true,
    viewrecords: true
});

但我仍然遇到同样的错误...

【问题讨论】:

  • 您应该另外验证您使用的 URL,因为在大多数情况下 HTTP 代码 404 是“未找到”。

标签: jquery asp.net jquery-plugins jqgrid


【解决方案1】:

也许你应该在serializeDelData 中使用JSON.stringify(来自json2.js)。您没有发布需要删除的网络方法DeleteCustomer 的原型,但您的问题可能可以使用以下代码解决:

serializeDelData: function(postdata) {
    return JSON.stringify({customerID: postdata.id});
}

使用 ASMX 服务的另一个常见问题。可能需要定义调用的 web 方法的所有参数(参见here 示例)。

ajaxDelOptions: { contentType: "application/json" }参数的用法也大多是必需的。

使用FiddlerFirebug 捕获和分析HTTP 流量会很有帮助。

【讨论】:

  • @Oleg:感谢您的回答。当您回答问题并添加您所说的所有内容时,我只是在编辑我的问题。我应该在哪里添加 ajaxDelOptions 参数?
  • @Lorenzo:您可以使用ajaxDelOptions: { contentType: "application/json" } 作为“Del”的附加选项(与reloadAfterSubmit: true 在同一级别)或扩展$.jgrid.del 而不是$.jgrid.defaults(请参阅@ 987654325@ 我之前发布的)。我发现您的错误代码 404 很奇怪。所以我建议你使用 Fiddler/Firebug 来查看发送的内容,到处使用 DeleteCustomerDeletecustomer 并检查 web.config
  • @Oleg: 有时我读得太快了……所以我没有意识到$.jgrid.del$.jgrid.defaults 之间的区别。现在一切正常。非常感谢!
  • @Oleg:很抱歉回到争论中。我只是想问你是否有办法捕捉删除调用的结果。我的 DeleteCustomer 方法返回一个包含操作细节的 json 对象。如何使用此设置检索该结果?再次感谢
  • @Lorenzo:如果您只想阅读 DeleteCustomer 方法返回的附加信息,您可以在定义为与其他“Del”参数相同级别的 afterSubmit 事件处理程序或在$.jgrid.delafterSubmit 有两个参数:data 作为服务器返回的文本(您应该手动调用jQuery.parseJSON)和serializeDelData 接收到的相同的postdata
猜你喜欢
  • 1970-01-01
  • 2011-07-24
  • 2013-07-21
  • 2011-11-03
  • 2013-08-22
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多