【发布时间】:2020-03-07 13:15:47
【问题描述】:
朋友们,我已经用一个项目 MVC 实现了一个解决方案类型 ASP.NetCore。我有一个视图,我使用https://github.com/cloudscribe/cloudscribe.Web.Pagination 进行分页。 **老实说,我举了这个例子并使用了它。但我不了解此代码示例的详细信息。
我现在遇到的问题是,我必须包含过滤器,例如 datepicker 范围。所以我正在使用引导日期选择器。但分页停止工作。
分页使查询字符串中的以下参数起作用:pageNumber、pageSize 和 query。当我发送过滤日期的请求时,我可以得到控制器中选择的日期,但是分页的参数为空。
这是一个分页工作正常的 url 示例:http://localhost/pager?query=1&pagesize=10&pageNumber=2
这是一个 url,当我在“应用”按钮中发送带有日期范围的请求时,分页在没有“查询”等参数的情况下死亡:http://localhost/pager?startDate=11/04/2019&endDate=11/11/2019
我想我也必须在请求中发送当前的查询字符串,但我不确定,我对这项技术有点陌生。感谢您的帮助。
我的看法→
@using (Html.BeginForm("Details", "Movements", routeValues: new { pageNumber = @Model.UserMovementsResults.PageNumber, pageSize = @Model.UserMovementsResults.PageSize, query = @Model.Query }, FormMethod.Get))
{
<br />
<div style="border: 2px solid #dee2e6;padding: 5px;width: 50%;">
<br />
<div class="input-daterange input-group" id="datepicker">
<span style="font-weight:bold">Date</span> From
@Html.TextBoxFor(model => model.StartDateFilter, "{0:d MMM yyyy}", new
{
id = "StartDateFilter",
@class = "input-sm form-control",
@readonly = "readonly"
})
<span class="input-group-addon"> To </span>
@Html.TextBoxFor(model => model.EndDateFilter, "{0:d MMM yyyy}", new
{
id = "EndDateFilter",
@class = "input-sm form-control",
@readonly = "readonly"
})
</div>
<br />
<input type="submit" value="Apply" class="btn btn-primary" name="Apply" />
</div>
<br />
<br />
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.UserMovementsResults.Data.FirstOrDefault().Date)
</th>
<th>
@Html.DisplayNameFor(model => model.UserMovementsResults.Data.FirstOrDefault().Description)
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.UserMovementsResults.Data)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Date)
</td>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
</tr>
}
</tbody>
</table>
<div>
<cs-pager cs-paging-pagesize="@Model.UserMovementsResults.PageSize"
cs-paging-pagenumber="@Model.UserMovementsResults.PageNumber"
cs-paging-totalitems="@Model.UserMovementsResults.TotalItems"
cs-pagenumber-param="pageNumber"
cs-show-first-last="true"
cs-suppress-empty-nextprev="true"
cs-remove-nextprev-links="false"
cs-suppress-inactive-firstlast="true"
cs-first-page-text="First"
cs-last-page-text="Last"
cs-pager-li-current-class="active"
cs-pager-li-non-active-class="disabled"
asp-controller="Movements"
asp-route-query="@Model.Query"
asp-route-pagesize="@Model.UserMovementsResults.PageSize"
asp-route-startDateFilter="@Model.StartDateFilter.GetValueOrDefault()"
asp-route-endDateFilter="@Model.EndDateFilter.GetValueOrDefault()"
asp-action="Details" cs-preserve-ambient-querystring="true"></cs-pager>
</div>
}
我的控制器(我已经尝试设置方法 HttpGet 和 HttpPost)→
[HttpGet]
public async Task<IActionResult> Details(int? pageNumber, int? pageSize, int? query, string startDate, string endDate)
{
if (query == null)
{
return NotFound();
}
DateTime startDateFilter = DateTime.Now.StartOfWeek(DayOfWeek.Monday);
DateTime endDateFilter = DateTime.Now.EndOfWeek(DayOfWeek.Monday);
var userMovements = await GetUserMovements(user.Id, pageNumber, pageSize, query, startDateFilter, endDateFilter);
return View(userMovements);
}
}
我的视图模型 →
public class UserMovementsViewModel
{
private DateTime? endDateFilter;
public UserMovementsViewModel()
{
UserMovementsResults = new PagedResult<UserMovementsResult>();
}
public string Query { get; set; } = string.Empty;
[Key]
public int Id { get; set; }
public int UserId { get; set; }
public PagedResult<UserMovementsResult> UserMovementsResults { get; set; } = null;
public DateTime? StartDateFilter { get; set; }
public DateTime? EndDateFilter
{
get => endDateFilter;
set
{
if (value != null)
{
endDateFilter = value;
endDateFilter = endDateFilter.Value.AddHours(23).AddMinutes(59).AddSeconds(59);
}
}
}
}
public class UserMovementsResult
{
public DateTime Date { get; set; }
public string Description { get; set; }
}
【问题讨论】:
标签: c# asp.net-mvc asp.net-core pagination asp.net-core-2.2