1. 数据的load有三种:第一种是通过url访问,第二种是form表单提交,第三种是点击查询按钮。
1).在view里:通过设定hidType值,form表单提交:
a: hidType值默认为1, 翻页:
b:.点击查询按钮,form表单提交:hidType传值为2。
function onClickQuery() {
$("#hidType").val(2);
$("#form1").submit();
}
2).通过url访问(对应get),hidType传值为2。
3).前两种对应的后端的action:
Get:
public ActionResult Index(string userId, string curpage, int? legId)
{
int page = 1;
if (!string.IsNullOrEmpty(curpage))
{
page = int.Parse(curpage);
}
ViewData["curpage"] = page;
BandingData(List, dptDate, 2, page, 0);
// BandingData(List<Test> ListTest,int hidType, int pageNum, int rollbackCount)
}
Post:[HttpPost]
public ActionResult Index(FormCollection forms)
{
int curPage = int.Parse(forms["curPage"]);
var pageNum = curPage;
int hidType = int.Parse(forms["hidType"]);
int TotalCount = listForStatus.Count();
var pageSize = 15;
int PageCount = (int)Math.Ceiling(TotalCount / (double)pageSize);
//bool whetherHaveFlightTime = false;
var test = forms["rollbackCount"];
if (test == "")
{
test = "-1";
}
int rollbackCount = int.Parse(test);
BandingData(list, forms["flightTime"], hidType, pageNum, rollbackCount);
}
2. private void BandingData(List<DTO_FlightAndPrice> flightAndPriceInfoList, string dptDate, int hidType, int pageNum, int rollbackCount)
{
//默认进入页面,点击“查询”按钮(见js),hidtype=2. 翻页时,hidtype=1
DateTime queryDptDate = new DateTime();
if (hidType == 2)
{
if (dptDate != "")
{
queryDptDate = DateTime.Parse(dptDate);
}
}
count = List.Count();
if (queryDptDate.ToString("yyyy-MM-dd") != "0001-01-01")
{
var item = List.Find(x => x.FlightInfo.FlightDate == queryDptDate);
index = List.IndexOf(item);
dateIndex = (index == -1) ? 0 : index + 1;
pageNum = dateIndex / 15 + 1;
rollbackCount = (index == -1) ? 0 : dateIndex - (pageNum - 1) * 15 - 2;
ViewData["rollbackCount"] = rollbackCount;
//数据向前(上)滚动了几条, 因此前面增加了一页, 当期页面就增加了1.
if (rollbackCount > 0)
{
pageNum++;
}
}
if (rollbackCount > 0)
{
//向前(上)滚动了几条, 因此页面已经加了1, 这里要捡回去再计算, 然后增加rollbackCount
skip = (pageNum - 2) * 15 + rollbackCount;
}
else
{
skip = (pageNum - 1) * 15 + rollbackCount;
}
if (skip < 0)
{
skip = 0;
}
flightAndPriceInfoList = flightAndPriceInfoList.Skip(skip).Take(15).ToList();
ViewData["pagerHelper"] = new PageHelper<DTO_FlightAndPrice>(flightAndPriceInfoList, pageNum - 1, 15, count, rollbackCount);
}
}
}
}
3. PageHelper:
public PageHelper(List<T> list, int curPage, int pageSize, int totalCount, int rollBackCount = 0)
{
CurrentPage = curPage + 1;
PageSize = pageSize;
TotalCount = totalCount;
if (PageSize > 0)
{
if (PageSize > 200)//每页显示数据量,自动不大于200
{
PageSize = 200;
}
if (rollBackCount > 0)
{
//数据向前滚动, 因此前面增加了一页, 除了增加的那个页面, 后面的总条目变少了rollBackCount.
PageCount = (int)Math.Ceiling((TotalCount - rollBackCount) / (double)PageSize) + 1;
}
else if (rollBackCount < 0)
{
//数据向后滚动, 但第一页还要显示, 相当于总条数变多了. TotalCount - rollBackCount 就是让总条数增加 |rollBackCount| (绝对值)
PageCount = (int)Math.Ceiling((TotalCount - rollBackCount) / (double)PageSize);
}
else
{
PageCount = (int)Math.Ceiling(TotalCount / (double)PageSize);
}
if (CurrentPage < 1) //当前页码,自动不小于1
{
CurrentPage = 1;
}
if (CurrentPage > PageCount) //当前页码,自动不大于总页数
{
CurrentPage = PageCount;
}
}
else
{
PageSize = 0;
PageCount = 0;
CurrentPage = 0;
}
this.AddRange(list);
}
todayIndex | 15 | 1 | 4 | |
pageNum | 2 | 1 | 1->2 | 2->3 |
rollbackCount | -2(下) | -1(下) | 2(上) | 1 |
skip | (2-1)*15+(-2) | (1-1)*15+(-1) | (2-2)*15+2 | (3-2)*15+1 |
skip | 13 | -1=>0 | 2 | 16 |
pageCount | 9 |