JQuery Datatables服务器端处理表不刷新内容

时间:2013-06-21 12:23:04

标签: jquery asp.net-mvc datatables

当我第一次打开页面时,它显示结果正常,但是当我使用过滤或排序列等时,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);
}

我认为我的问题是关于客户端代码,但无法理解。

1 个答案:

答案 0 :(得分:2)

sEchoDatatables呈现数据至关重要。调用是异步的,因此Datatables需要知道请求的顺序,通过在每个服务器调用中递增sEcho变量来保留此顺序。

但是,您将一直作为sEcho返回1。根据{{​​1}},已经呈现了Datatable 1的数据,因此它不会呈现您的数据。您应该从sEcho返回sEcho值。简单地说,替换

jQueryDataTableParamModel

sEcho = "1"