PagedListPager如何解释日期参数,因为它似乎将01/04/2003
视为2003年4月1日的一个寻呼机项目,而2003年1月4日视为另一个。
在我的剃刀标记中,我显示了2个文本框,允许用户选择报告的开始和结束日期,我在底部设置了寻呼机以允许用户移动通过结果。现在奇怪的是,如果我输入一个日期,如2003年4月1日并返回我的结果,底部的寻呼机将日期设置为1月4日,当分页到其他页面时。然而,一旦打开,例如第2页,反之亦然。它将在1月4日将其转换为4月1日......?我只需要在这里保持一致 - 但实际上对此硬编码英国日期格式没有任何问题。
<label for="StartDate">Start Date: </label>
<input type="text" class="datepicker" id="StartDate" name="StartDate"
value="@ViewBag.StartDate" />
<label for="EndDate">End Date:</label>
<input type="text" class="datepicker" id="EndDate" name="EndDate"
value="@ViewBag.EndDate" />
ViewBag就在那里,所以当结果之间的分页和PagedListPager使用相同的值时,输入的值是持久的
@Html.PagedListPager(@Model, page => Url.Action("ReadyBox",
new { page = page,
sortOrder = ViewBag.CurrentSort,
startDate = ViewBag.StartDate,
endDate = ViewBag.EndDate }),
PagedListRenderOptions.ClassicPlusFirstAndLast)
并且控制器为
public ActionResult ReadyBox(string sortOrder, int? page,
DateTime? startDate, DateTime? endDate)
{
ViewBag.CurrentSort = sortOrder;
ViewBag.NameSortParam = string.IsNullOrWhiteSpace(sortOrder) ? "Name desc" : "";
ViewBag.DateSortParam = sortOrder == "Date" ? "Date desc" : "Date";
int pageNumber = page ?? 1;
if (startDate == null)
startDate = DateTime.Now.AddMonths(-1);
if (endDate == null)
endDate = DateTime.Now;
ViewBag.StartDate = ((DateTime)startDate).ToShortDateString();
ViewBag.EndDate = ((DateTime)endDate).ToShortDateString();
// rest of the controller
}
答案 0 :(得分:0)
对于GET请求,我建议您使用InvariantCulture格式:
@Html.PagedListPager(
Model,
page => Url.Action(
"ReadyBox",
new {
page = page,
sortOrder = ViewBag.CurrentSort,
startDate = ViewBag.StartDate.ToString("yyyy-MM-dd"),
endDate = ViewBag.EndDate.ToString("yyyy-MM-dd")
}
),
PagedListRenderOptions.ClassicPlusFirstAndLast
)
默认模型绑定程序在从POST请求绑定参数时绑定GET请求和当前区域性的参数时始终使用不变的区域性格式。您可以在this blog post
中了解有关它的更多信息。