我不知道如何解决这个问题,尝试了一整天但是没有成功解决这个问题。我使用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;
}
}
}
}
答案 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
。