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