使PagedListPager使用英国日期格式作为参数

时间:2013-04-13 21:13:25

标签: asp.net-mvc pagedlist

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
}

1 个答案:

答案 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中了解有关它的更多信息。