2017-05-27 102 views
0

我正在學習我的ASP.NET Core MVC項目中的jquery-datatables。問題是數據表不調用服務器端的操作方法。jquery datatables服務器端不調用控制器內的動作

CrudController

[HttpPost] 

public object GetStudents() 
{ 
    var test = student.GetAll(10, 0); //List<Student> the count result is 2 
    return new { 
     draw = 2, 
     recordsTotal = 2, 
     recordsFiltered = 2, 
     data = test 
    }; 
} 

public IActionResult Index() 
{ 
    return View(); 
} 

HTML for IActionResult Index

<table id="example"> 
    <thead> 
     <tr> 
      <th>ID</th> 
      <th>Name</th> 
      <th>Birthdate</th> 
      <th>Active</th> 
     </tr> 
    </thead> 
</table> 

Script for datatables inside $(document).ready

$("#example").DataTable({ 
       "processing": true, 
       "serverSide": true, 
       "ajax": { 
        url: "@Url.Action("GetStudents", "Crud")", 
        type: "POST" 
       }, 
       "columns": [ 
         { "data": "id" }, 
         { "data": "name" }, 
         { "data": "birthdate" }, 
         { "data": "active" } 
       ] 
     }); 

上述代碼不產生錯誤。但是GetStudents()方法沒有被調用(我把一個斷點)。他們怎麼了?

+0

url:「/ Crud/GetStudents」 –

+0

您是否按照@AsifRaza的建議更改了網址?您可能必須指定完整的URL,而不僅僅是控制器和方法。 – markpsmith

回答

0

您的控制器定義看起來有點不對我。

它應該返回JSON數據

public class CrudController : Controller 
    {    
     public ActionResult Index() 
     { 
      return View(); 
     } 
     public JsonResult GetStudents() 
     { 
      try 
      { 
       var result = <data list> 
       return Json(result, JsonRequestBehavior.AllowGet);      
      } 
      catch (Exception ex) 
      { 
       //Log ex.Message 
      } 
     } 
    } 

然後,在客戶端側

$(document).ready(function() { 
    $('#example').DataTable({ 
     "ajax": { 
      "url": "/Crud/GetStudents", 
      "dataSrc": "" 
     }, 
     "columns": [{ 
      "data": "some col" 
     }, { 
      "data": "some other col" 
     }, 
     .... ] 
    }); 
}); 

還可以使用鉻/提琴手的網絡選項卡,檢查所述請求。

+0

GetStudents方法不被數據表調用。另一方面,我使用'$ .getJSON'成功調用它。問題不是返回值,但爲什麼數據表無法調​​用此方法。 – derodevil

+0

您是否按照我說的方式嘗試過?您的控制器正在返回一個實際返回json的對象 –

+0

是的。它仍然不起作用 – derodevil