همه ما مبتدی هستیم و همه ما هنگام واکشی داده های عظیم از پایگاه داده با مشکل عملکرد روبرو هستیم.
یکی از راه حل ها این است که می توانیم یک داده کوچک بیاوریم (چه مقدار داده برای نشان دادن نیاز داریم) و می توانیم با Jquery DataTable به آن برسیم.
بهطور پیشفرض Jquery DataTable همه دادهها را از Backend و Bind به Table میآورد، اما ما نمیخواهیم همه رکوردها یکجا باشند.
برای این کار، میتوانیم با صفحهبندی سمت سرور با Jquery DataTable برویم
- مقالات زیادی در مورد صفحهبندی سمت سرور در اینترنت وجود دارد، اما حداکثر آنها از "context.Request.Form" برای دریافت ویژگیهای DataTable برای مثال: context.Request.Form["draw"]، context.Request.Form استفاده میکنند. شروع»]. اما بیشتر اوقات پوچ می شود و ما برای به دست آوردن ارزش ها مبارزه می کنیم
- در این مقاله میتوان به صفحهبندی سمت سرور با شی با متدهای Post دست یافت
بیایید با پایگاه داده شروع کنیم ،
برای این کار من از پایگاه داده نمونه Northwind استفاده می کنم، می توانید این پایگاه داده را از اینجا دانلود کنید
https://github.com/microsoft/sql-server-samples/tree/master/samples/databases/northwind-pubs
هنگامی که پایگاه داده را در SQL اضافه کردید، جدول Employees را با 10-15 رکورد پیدا خواهید کرد، برای این مقاله من 576 رکورد اضافه کرده ام.
اکنون در اینجا روش ذخیره شده برای دریافت داده های کارکنان آمده است
در این SP ما 4 پارامتر را پاس می کنیم
(
@page INT = 0,
@size INT =10,
@sort nvarchar(50) ='EmployeeId asc',
@totalrow INT ='50'
)
AS
BEGIN
DECLARE @offset INT
DECLARE @newsize INT
DECLARE @sql NVARCHAR(MAX)
IF(@page=0)
BEGIN
SET @offset = @page
SET @newsize = @size
END
ELSE
BEGIN
SET @offset = @page+1
SET @newsize = @size-1
END
SET NOCOUNT ON
SET @sql = '
WITH OrderedSet AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY ' + @sort + ') AS ''Index''
FROM [dbo].Employees
)
SELECT * FROM OrderedSet WHERE [Index] BETWEEN ' + CONVERT(NVARCHAR(12), @offset) + ' AND ' + CONVERT(NVARCHAR(12), (@offset + @newsize))
EXECUTE (@sql)
SET @totalrow = (SELECT COUNT(*) FROM Employees)
select @totalrow
END
در MVC c# کلاس Pagination.cs را مانند زیر اضافه کرده ام
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace ServerSidePagination.Models
{
public class Pagination
{
public DatatablePostData data { get; set; }
}
public class DatatablePostData
{
public int draw { get; set; }
public int start { get; set; }
public int length { get; set; }
public List<Column> columns { get; set; }
public Search search { get; set; }
public List<Order> order { get; set; }
}
public class Column
{
public string data { get; set; }
public string name { get; set; }
public string searchable { get; set; }
public string orderable { get; set; }
public Search search { get; set; }
}
public class Search
{
public string value { get; set; }
public string regex { get; set; }
}
public class Order
{
public int column { get; set; }
public string dir { get; set; }
}
public class DTResponse
{
public int recordsTotal { get; set; }
public int recordsFiltered { get; set; }
public string data { get; set; }
}
}
کنترلر با متد عمل برای مشاهده صفحه (افزودن صفحه مشاهده برای صفحه بندی روش مثال)
{
return View();
}