微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jquery – 在传递给Web服务之前将jqGrid rowNum从ALL更改为-1的最佳方法

我希望找到允许用户选择在jqgrid显示所有记录的最佳方法.我知道为rows参数传递的-1值表示ALL,但我想在rowList select元素中出现单词“ALL”而不是-1,即. rowList:[15,50,100,’ALL’].

我正在将网格请求传递给一个接受“行”的int的Web服务,我正在尝试找到如何以及何时将用户选择的“ALL”值更改为-1,然后再将其发送到网络服务.

下面是我清理过的网格代码.我在数据类型函数中的$.ajax之前尝试了一些不同的代码块.但大多数尝试似乎都是我必须以最可能的方式做到这一点.例如,

datatype: function(postdata) {
   if ($("#gridTableAssets").jqgrid('getGridParam','rowNum') == 'ALL') {
      $("#gridTableAssets").appendPostData({ "rows": -1,"page": 1 });
   }
   $.ajax({...

但这样做似乎会导致实际的“页面”GridParam在随后的网格操作中被忽略,迫使我在其他地方处理它.似乎这是经常在那里做的事情,并且有干净的方式去做.

清理网格代码

$("#gridTableAssets").jqgrid({
    datatype: function(postdata) {
       $.ajax({
           url: "/Service/Repository.asmx/GetAssets",data: JSON.stringify(postdata),type: 'POST',contentType: "application/json; charset=utf-8",error: function(XMLHttpRequest,textStatus,errorThrown) {
              alert('error');
           },success: function(msg) {
              var assetsGrid = $("#gridTableAssets")[0];
              assetsGrid.addJSONData(JSON.parse(msg));
              ...
           }
       });
    },...
    pager: $('#pagerAssets'),rowNum: 15,rowList: [15,'ALL'],...                    
    onPaging: function(index,colindex,sortorder) {
       SessionKeepAlive();
    }
});

这是网络服务

[WebMethod]
public string GetAssetsOfAssetStructure(bool _search,int rows,int page,string sidx,string sord,string filters)

解决方法

首先,我发现你的问题非常好.当我开始使用jqgrid时,我在rowList中搜索“All”并进行了一些实验,但没有任何成功.然后我忘记了这个问题.现在在你的问题之后我想到在我所有的jqgrids中使用这个功能.

现在谈谈解决方案.这很容易,但我建议将数据类型替换为数据类型的函数:’json’.您可以使用标准’json’类型在函数内部执行的所有操作.要将contentType更改为“application / json; charset = utf-8”,可以使用ajaxGridOptions选项(有关详细信息,请参阅Setting the content-type of requests performed by jQuery jqGrid).可以使用postData参数替换jQuery.ajax的数据参数,但只有在想要向服务器发送一些其他参数时才需要它(如How to filter the jqGrid data NOT using the built in search/filter box中所述).最后,我们收到如下内容

$("#gridTableAssets").jqgrid({
    datatype: 'json',gridview: true,url: '/Service/Repository.asmx/GetAssets',//postData: postdata,// add some additional parameters
    ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },mtype: 'POST',// ...
    pager: $('#pagerAssets'),serializeGridData: function (postData) {
        if (typeof postData.rows === "string") {  // "ALL"
            postData.rows = 10000;  // or -1 if your server 
        }
        if (isNaN(postData.page)) { // fix NaN in page for rows="ALL"
            postData.page = 1;
        }
        return JSON.stringify(postData);
    },// ...                    
});

如果您计划在所有jqgrids中使用serializeGridData,ajaxGridOptions和一些其他参数,则可以在$.jgrid.defaults中定义此函数(请参阅另一个时间Setting the content-type of requests performed by jQuery jqGrid).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐