原始碼嘗試在 time(DateTime time1, DateTime time2) 中設定參數,再於 Moneydetail 直接使用 time1/time2,但 HTTP 本質無狀態,兩個 Action 互不共享區域變數。
public class TransactionQueryModel {
public int? UserId { get; set; }
public DateTime? BeginDate { get; set; }
public DateTime? EndDate { get; set; }
public int? AccountType { get; set; }
public string OrderField { get; set; } = "Id Desc";
public int PageIndex { get; set; } = 1;
public int PageSize { get; set; } = 15;
}
public PagedList GetWithdrawalDetail(TransactionQueryModel q) {
var query = db.Finance_WithdrawalDetail.AsQueryable();
if (q.UserId.HasValue) query = query.Where(x => x.UserId == q.UserId.Value);
if (q.BeginDate.HasValue) query = query.Where(x => x.AddTime >= q.BeginDate.Value);
if (q.EndDate.HasValue) query = query.Where(x => x.AddTime <= q.EndDate.Value);
if (!string.IsNullOrEmpty(q.OrderField)) query = query.OrderBy(q.OrderField);
return new PagedList(query, q.PageIndex, q.PageSize);
}
[HttpGet]
public ActionResult MoneyDetail(TransactionQueryModel model) {
if (!Request.IsAuthenticated) return RedirectToLogin();
var data = _financeService.GetWithdrawalDetail(model);
return View(data);
}
@model PagedList
@foreach (var item in Model) { ... }
@Html.PagedListPager(Model, page => Url.Action("MoneyDetail", new { page, model.BeginDate, model.EndDate }))
DateTime 型別自動驗證格式。切勿在 Action 之間靠 TempData/Session 傳遞查詢條件,會造成重新整理、多開分頁時狀態混亂。所有查詢條件必須在 URL 中完整表達,符合 REST 風格且利於 SEO/書籤分享。