0

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
}
4

1 回答 1

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
)

默认模型绑定器在绑定来自 GET 请求的参数时始终使用不变的区域性格式,而在绑定来自 POST 请求的参数时始终使用当前区域性。您可以阅读更多关于它的信息this blog post

于 2013-04-24T07:22:05.527 回答