仅在第一次点击时加载Jquery网格,而不是在后续点击时重新加载

时间:2016-11-18 12:12:08

标签: javascript jquery asp.net-mvc-4 jqgrid asp.net-ajax

我有一个JQuery网格,根据某些下拉选项在按钮点击时填充。

第一次按下按钮时,网格会加载数据。但是在随后的点击中,网格不会根据更改的下拉选项重新加载。

第一个按钮点击加载的网格数据一直存在,除非我重新加载页面。

我已经在网上找到了一些解决方案,例如

  1. 使用$("#tblJQGrid").trigger("reloadGrid");进行后续点击(第一次点击除外)
  2. cache:false property。
  3. 但他们都没有工作。

    以下是我的jqgrid代码供参考

    function BindGridData()
    {
        $("#tblJQGrid").jqGrid(
                {url: "@Url.Action("GetGeographyBreakUpData", "GeoMap")"+ "?Parameters=" + Params + "",
                    datatype: "json",
                    //data: { "Parameters": Params },
                    async: false,
                    mtype: 'GET',
                    cache: false,
                    colNames: ['Id','GeoGraphy', 'Completed', 'InProgress'],
                    colModel: [
                    { name: 'Id', index: 'Id', width: 20, stype: 'text',hidden:true },
                    { name: 'Geography', index: 'Geography', width: 150 },
                    { name: 'Completed', index: 'Completed', width: 150 },
                    { name: 'InProgress', index: 'InProgress', width: 150 },
                    ],
                    pager:'#pager',
                    jsonReader: {cell:""},
                    rowNum: 10,
                    sortorder: "desc",
                    sortname: 'Id',
                    viewrecords: true,
    
                    caption: "Survey Status:Summary",
                    scrollOffset: 0});
    
     }
    

    以下是我如何初始化按钮点击事件

    $(document).ready(function () {
    var firstClick=true;
            $("#btnSubmit").click(function(){
                btnSubmitClick();
                debugger
                if(!firstClick)
                {
                    $("#tblJQGrid").trigger("reloadGrid");
                }
                firstClick=false;
                BindGridData();
            });
    });
    

    有人能告诉我我做错了吗?

1 个答案:

答案 0 :(得分:0)

似乎存在典型的误解代码$("#tblJQGrid").jqGrid({...});的作用。它是创建网格。这意味着在相对复杂的div和表结构中转换空表<table id="btnSubmit"></table>。见here。在理解了BindGridData的第二次调用之后应该很清楚,因为table#btnSubmit并不是空的。 jqGrid测试它,什么也不做。因此,您当前的代码只会使用旧的网址触发reloadGrid(请参阅Params)。

要解决此问题,您有两个主要选项:

  1. 使用url: "@Url.Action("GetGeographyBreakUpData", "GeoMap")"postData,其属性定义为函数(请参阅the old answer
  2. 点击重新创建网格,而不是触发reloadGrid。您可以在致电GridUnload之前致电BindGridData方法(请参阅the old answer)。