MVC+EF返回數據集時都會對應一個實體,這種情況當然是確定的實體,但是當返回的實體是不確定的又該如何?思前想后,覺得datatable應該可以滿足需求,但是當興致勃勃的組合完sql按照以前的方式( return Json(new { total = pageCount, rows = list }, JsonRequestBehavior.AllowGet);)返回json時前台接收報錯 ”序列化類型為“System.Reflection.RuntimeModule”的對象時檢測到循環引用“ 【具體原因還不是很清楚】 但是感覺就是序列化json對象是失敗,轉而考慮直接返回json格式字符串,代碼如下:

1 JsonSerializerSettings setting = new JsonSerializerSettings() 2 { 3 ReferenceLoopHandling = ReferenceLoopHandling.Ignore 4 }; 5 6 var ret = "{\"total\":" + dt.Rows.Count + ",\"rows\":" + JsonConvert.SerializeObject(dt, setting) + "}"; 7 8 return Json(ret, JsonRequestBehavior.AllowGet);
確實前台不再報上述錯誤,但是加載不上數據,查看了bootstrap-table api發下有個responseHandler屬性:加載服務器數據之前的處理程序,可以用來格式化數據。遂再次方法中嘗試把取得的數據轉換成json對象,如下代碼:
responseHandler: function (res) { //后台數據源為datatable返回json字符串,需要處理成json對象 res = eval('(' + res + ')') return res; }
最終數據成功加載。文章開頭我提過動態的列頭及bootstrap-table列頭需要從數據庫中動態獲取,程序中我做了特殊處理前台會動態生成columns,后台也會動態生成datatable表頭,下圖顯示效果。