DataSourceRequest、DataSourceResult、serverpaging 基本框架
本範例示範簡單的 serverpaging 作法,當中不去特別操作 DataSourceRequest 物件實體。
一、Model
Model 的部份為使用北風資料庫的 Product table。
二、Controller
HomeController.cs 的內容為
using Kendo.Mvc.Extensions;
using Kendo.Mvc.UI;
using System.Collections.Generic;
using System.Web.Mvc;
using WebApplication1.Models;
namespace WebApplication1.Controllers
{
public class HomeController : Controller
{
private NorthwindEntities db = new NorthwindEntities();
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult GetProducts([DataSourceRequest] DataSourceRequest request)
{
//request 物件可視為從前端傳來的 sort、filter 條件因子
//本例不會去特別操作 request 物件,而只是將 request 物件原封不動地做成 DataSourceResult 結果
DataSourceResult result = db.Products.ToDataSourceResult(request);
//將 result 相關數值傳回給前端
ProductView ProductView = new ProductView();
ProductView.Items = (IEnumerable<Product>)result.Data;
ProductView.TotalCount = result.Total;
return JsonNetResult(ProductView);
}
private ContentResult JsonNetResult(object model)
{
return Content(Newtonsoft.Json.JsonConvert.SerializeObject(model), "application/json", System.Text.Encoding.UTF8);
}
}
}
說明:
1、request 物件可視為從前端傳來的 sort、paging、filter 條件因子。
2、本例不會去特別操作 request 物件,而只是將 request 物件原封不動地做成 DataSourceResult 結果。
三、View
Index.cshtml 的內容為
@{
ViewBag.Title = "Home Page";
}
<div id="grid"></div>
@section scripts
{
<script src="https://kendo.cdn.telerik.com/2020.1.219/js/kendo.all.min.js"></script>
<script>
$(document).ready(init);
function init() {
var dataSource = new kendo.data.DataSource({
transport: {
read: {
datatype: "json",
type: "post",
url: "/Home/GetProducts"
}
},
schema: {
data: 'Items',
total: 'TotalCount'
},
pageSize: 10,
serverPaging: true,
});
$("#grid").kendoGrid({
dataSource: dataSource,
pageable: true
});
}
</script>
}
說明:
由於 paging 方式改成 server paging,故 dataSource 裡的 schema.data、schema.total 值也都要定義。
上例的黃色、藍色框框都是改成 server paging 後,都要加上去的。
執行結果
四、DataSourceRequest、DataSourceResult 類別參考
DataSourceRequest 的內容為
namespace Kendo.Mvc.UI
{
public class DataSourceRequest
{
public DataSourceRequest();
public int Page { get; set; }
public int PageSize { get; set; }
public IList<SortDescriptor> Sorts { get; set; }
public IList<IFilterDescriptor> Filters { get; set; }
public IList<GroupDescriptor> Groups { get; set; }
public IList<AggregateDescriptor> Aggregates { get; set; }
}
}
DataSourceResult 的內容為
namespace Kendo.Mvc.UI
{
public class DataSourceResult
{
public DataSourceResult();
public IEnumerable Data { get; set; }
public int Total { get; set; }
public IEnumerable<AggregateResult> AggregateResults { get; set; }
public object Errors { get; set; }
}
}
參考資料: