当我第一次打开页面时,它显示结果正常,但是当我使用过滤或排序列等时,ajax方法成功返回正确的元素,json格式看起来正确但网格不更新内容。我通过以下方式初始化数据表:
$('#myDataTable').dataTable({
"sAjaxSource": '@Url.Action("_Index")',
"bServerSide": true,
"aoColumns": [
{ "sName": "Konu" },
{ "sName": "Şikayet" },
{ "sName": "Kullanıcı Adı" },
{ "sName": "Müşteri Adı" },
{ "sName": "Müşteri Soyadı" },
{ "sName": "Şirket Adı" },
{ "sName": "Cevaplandı" },
{
"sName": "Cevap Ver",
"bSearchable": false,
"bSortable": false,
"fnRender": function (oObj) {
return '<a href='+'@Url.Action("Edit")' + '/' +
oObj.aData[7] + '>Cevap Ver</a>';
}
}
]
});
在服务器端:
public ActionResult _Index(jQueryDataTableParamModel table)
{
var feedbacksList = (List<FeedbackAjaxVM>)AppService.QueryInfo("Admin", "GetFeedbackAjaxList", table);
IEnumerable<string[]> feedbacks = from c in feedbacksList
select new string[] {
c.Subject,
c.Text,
c.Username,
c.CustomerName,
c.CustomerSurname,
c.CustomerFirmname,
c.Response,
c.Id.ToString()
};
return Json(new
{
sEcho = "1",
iTotalRecords = feedbacksList.FirstOrDefault() != null ? feedbacksList.FirstOrDefault().TotalRecords : 0,
iTotalDisplayRecords = table.iDisplayLength,
aaData = feedbacks
},JsonRequestBehavior.AllowGet);
}
我认为我的问题是关于客户端代码,但无法理解。
答案 0 :(得分:2)
sEcho
对Datatables
呈现数据至关重要。调用是异步的,因此Datatables
需要知道请求的顺序,通过在每个服务器调用中递增sEcho
变量来保留此顺序。
但是,您将一直作为sEcho返回1。根据{{1}},已经呈现了Datatable
1的数据,因此它不会呈现您的数据。您应该从sEcho
返回sEcho值。简单地说,替换
jQueryDataTableParamModel
与
sEcho = "1"