jQuery Datatable:分页和过滤器无法正确显示

时间:2016-11-11 09:23:42

标签: c# asp.net ajax datatables

我不知道如何解决这个问题,尝试了一整天但是没有成功解决这个问题。我使用jQuery数据表,并显示我的大量数据,我使用服务器端。

作为测试,仅向表中调用10行数据。然后在传递到表之前,我使用此solution 重新构建了 dataSrc 中的数据。表格显示成功,但分页和过滤器无法正确显示。

任何人都可以帮忙吗。

以下是我的代码。

AJAX

$('#example').DataTable({
  "processing": true,
  "serverSide": true,
  "ajax": {
     type: "POST",
     contentType: "application/json; charset=utf-8",
     url: "datatables.aspx/GetData",
     'data': function (data) {
        return JSON.stringify(data);
     },
     "dataSrc": function (data) {
        var json = $.parseJSON(data.d);

        var myData = {};
        myData.draw = parseInt(json.otherData[0].draw);
        myData.recordsTotal = parseInt(json.otherData[0].recordsTotal);
        myData.recordsFiltered = parseInt(json.otherData[0].recordsFiltered);
        myData.data = json.searchData;

        return myData.data;
     }
   },
   "columns": [
      { "data": "Username" }
   ]
  }
});

C#

[WebMethod]
[ScriptMethod(UseHttpGet = false)]
public static string GetData(int draw, object columns, object order, int start, int length, object search)
{
    string constr = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        string mySql = "SELECT TOP 10 username AS Username FROM user_lookup";
        using (SqlCommand cmd = new SqlCommand(mySql, con))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
            {
                con.Open();
                DataSet ds = new DataSet();
                sda.Fill(ds, "searchData");

                DataTable newDT = new DataTable("otherData");

                //Add columns to DataTable.
                newDT.Columns.AddRange(new DataColumn[4] {
                    new DataColumn("draw"),
                    new DataColumn("recordsTotal"),
                    new DataColumn("recordsFiltered"),
                    new DataColumn("userRole")
                });

                //Add rows to DataTable.
                newDT.Rows.Add(draw, length, start, "myrole");
                ds.Tables.Add(newDT);

                string JSONString = string.Empty;
                JSONString = JsonConvert.SerializeObject(ds);
                return JSONString;
            }
        }
    }
}

这是我返回数据表以构建表的数据。 enter image description here

数据过滤和分页不正确,应该只有1页的分页。 enter image description here

2 个答案:

答案 0 :(得分:3)

我有一个解决方案。您应该直接修改响应的对象。

"dataSrc": function (data) {
        var json = $.parseJSON(data.d);

        data.draw = parseInt(json.otherData[0].draw);
        data.recordsTotal = parseInt(json.otherData[0].recordsTotal);
        data.recordsFiltered = parseInt(json.otherData[0].recordsFiltered);
        data.data = json.searchData;

        return data.data;
     }

希望它适用于你的情况。

答案 1 :(得分:0)

您的回复不包含属性new { controller = "Test", action = "Index", id = UrlParameter.Optional, pageNumber = 1, pageSize = 50 } otherData,并且您正在按这些名称访问数据。

您的回复是一个简单的对象,具有以下属性。

  • searchData
  • data
  • recordsTotal
  • recordsFiltered

因此,您需要直接从您的回复中访问它们

draw

同样var myData = {}; myData.draw = parseInt(json.draw); myData.recordsTotal = parseInt(json.recordsTotal); myData.recordsFiltered = parseInt(json.recordsFiltered); myData.data = json.data; recordsTotal的{​​{1}}个total现在您正在返回records,所显示的记录也是10

您收到10因为没有属性NaN所以当您将其更改为json.otherData[0].recordsFiltered时,它会显示json.recordsFiltered