第一次打开页面时,它显示的结果很好,但是当我使用过滤或对列进行排序时。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);
}
我认为我的问题与客户端代码有关,但无法弄清楚。
最佳答案
sEcho
对于Datatables
呈现数据至关重要。调用是异步的,因此Datatables
需要知道请求的顺序,此顺序通过在每个服务器调用中增加sEcho
变量来保留。
但是,您一直在返回1作为sEcho。根据Datatable
,具有sEcho
1的数据已经准备好呈现,因此它不呈现您的数据。您应该从jQueryDataTableParamModel
返回sEcho值。只需更换
sEcho = "1"
与
sEcho = table.sEcho
关于jquery - JQuery Datatables服务器端处理表不刷新内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17235149/