Shu*_*aib 3 asp.net datatables asp.net-web-api
我正在尝试将ASP.NET Web API 2与jQuery Datatables 1.10.7集成。
我想在我的数据表中使用服务器端处理,所以我使用 Nuget 包DataTables.AspNet.WebApi2
这是我的 JavaScript
<script>
$(document).ready(function () {
$('#example').dataTable({
"serverSide": true,
"ajax": "/api/StudentsBasicInfo/GetPaginatedStudentsList2",
columns: [
{
name: 'FirstName',
data: 'FirstName',
title: "First Name",
sortable: false,
searchable: false
},
{
name: 'LastName',
data: "LastName",
title: "Last Name",
sortable: false,
searchable: false
}
]
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
这是我的 HTML
<table id="example" class="display" cellspacing="0" width="100%">
</table>
Run Code Online (Sandbox Code Playgroud)
这是我的 Web API
public JsonResult<IDataTablesResponse> GetPaginatedStudentsList2(IDataTablesRequest request)
{
StudentsInfoHybrid searchObj = new StudentsInfoHybrid();
StudentsBasicInfoBL blClass = new StudentsBasicInfoBL();
try
{
searchObj.PageSize = request.Length;
searchObj.Offset = request.Start;
searchObj.count = false;
//get the list of students
var students = blClass.GetAllStudentsHybridInfo(searchObj);
//filter list according to the criteria passed in the request object
var filteredStudents = students.Where(i => i.FirstName.Contains(request.Search.Value)).ToList();
//reset page size and offset so that count of total objects can be obtained
searchObj.PageSize = 0;
searchObj.Offset = 0;
var totalCount = blClass.CountAllStudentsHybridInfo(searchObj);
var response = DataTablesResponse.Create(request, students.Count(), filteredStudents.Count(), filteredStudents);
return new DataTablesJsonResult(response, Request);
}
catch (Exception ex)
{
return null;
}
finally
{ }
}
Run Code Online (Sandbox Code Playgroud)
我的代码构建完美,但在执行期间,当 datatable 调用 Web API 时,我可以在调试模式下看到IDataTablesRequest 请求 对象为 null。
这是 Google Chrome 网络日志的屏幕截图。
正如我从网络日志中看到的,Web API 正在返回这个我不知道的异常。
{"Message":"An error has occurred.","ExceptionMessage":"A null value was returned where an instance of IHttpActionResult was expected."
Run Code Online (Sandbox Code Playgroud)
我还附上了 Google Chrome 网络日志中我的请求的另一个屏幕截图。
您的webapi controller
方法需要一个类型的对象IDataTablesRequest
,同时向您发送 ajax 调用,webapi
但没有发送任何内容。
您需要IDataTablesRequest object
使用 的data
参数发送。您可以在 javascript 中创建一个使用ajax
的对象并将其发送到 webapi。IDataTablesRequest
Object
var request = new Object();
request.Length = 10;
request.Start = 1;
$('#example').dataTable( {
"ajax": {
"url": "/api/StudentsBasicInfo/GetPaginatedStudentsList2",
"data": request
}
});
Run Code Online (Sandbox Code Playgroud)
如果您已将 webapi 方法装饰为 ,您可能还需要设置property type
为。POST
ajax
HttpPost
欲了解更多详情,您可以查看以下链接
https://datatables.net/reference/option/ajax.data
https://cmatskas.com/server-side-jquery-datatables-with-asp-net/