项目有一个需求,需要将Grid的分页,排序,过滤信息保存下来,并且在跳转到该功能时自动应用
实现方式
// Action
public IActionResult Index([DataSourceRequest] DataSourceRequest request)
{
ViewData["returnUrl"] = Request.GetEncodedUrl();
return View(request);
}
// extensions
public static GridBuilder<TModel> Init<TModel>(this GridBuilder<TModel> builder, DataSourceRequest request)
where TModel : class
{
var component = builder.ToComponent();
var dataSource = component.DataSource;
if (request != null)
{
dataSource.PageSize = request.PageSize > 0 ? request.PageSize : 20;
dataSource.Page = request.Page;
dataSource.GroupPaging = request.GroupPaging;
if (request.Filters != null)
{
dataSource.Filters.AddRange(request.Filters);
}
if (request.Sorts != null)
{
dataSource.OrderBy.AddRange(request.Sorts);
}
}
else
{
dataSource.PageSize = 20;
}
return builder;
}
// cshtml
@(
Html.Kendo().Grid<VM>().Init(Model)
)
<script>
function getNewUrl(event) {
event.preventDefault();
var url = new URL(document.location.href);
var grid = $('#gridId').data("kendoGrid")
if (grid) {
var dataSource = grid.dataSource;
var options = dataSource.transport.setup({
data: {
page: dataSource.page(),
pageSize: dataSource.pageSize(),
sort: dataSource.sort(),
filter: dataSource.filter(),
group: dataSource.group()
}
}, "read")
var data = options.data;
url.searchParams.set("page", encodeURIComponent(data.page));
url.searchParams.set("pageSize", encodeURIComponent(data.pageSize));
url.searchParams.set("sort", encodeURIComponent(data.sort || ""));
url.searchParams.set("filter", encodeURIComponent(data.filter || ""));
url.searchParams.set("group", encodeURIComponent(data.group || ""));
}
return url.pathname + url.search;
}
</script>