排序和分页如何工作?排序和分页MVC
作为前言,我对这些材料很感兴趣。所以,外行的条件是值得赞赏的。
我跟着turorials,张贴在这里,并有我的一般工作。我只是困惑,因为当我排序我的列时,排序列表不会继续到下一页。然后,当我点击标题进行排序时,在下一页上说AppName,它会将我带回第一页。
我该如何避免这样做?表后
public ActionResult Index(string sortOrder, string searchString, int? page)
{
ViewBag.CurrentSort = sortOrder;
ViewBag.IDSortParm = String.IsNullOrEmpty(sortOrder) ? "AppID_desc" : "";
ViewBag.NameSortParm = sortOrder == "Name" ? "AppName_desc" : "Name";
ViewBag.TechSortParm = sortOrder == "Tech" ? "Technology_desc" : "Tech";
ViewBag.VersSortParm = sortOrder == "Vers" ? "Version_desc" : "Vers";
ViewBag.TierSortParm = sortOrder == "Tier" ? "Tier_desc" : "Tier";
ViewBag.StratSortParm = sortOrder == "Strat" ? "Strategy_desc" : "Strat";
if (Request.HttpMethod != "GET")
{
page = 1;
}
ViewBag.CurrentFilter = searchString;
var applications = from a in db.Application_
select a;
if (!String.IsNullOrEmpty(searchString))
{
applications = applications.Where(a => a.AppName.ToUpper().Contains(searchString.ToUpper()));
}
switch (sortOrder)
{
case "AppID_desc":
applications = applications.OrderByDescending(a => a.AppID);
break;
case "Name":
applications = applications.OrderBy(a => a.AppName);
break;
case "AppName_desc":
applications = applications.OrderByDescending(a => a.AppName);
break;
case "Vers":
applications = applications.OrderBy(a => a.Version);
break;
case "Version_desc":
applications = applications.OrderByDescending(a => a.Version);
break;
case "Tier":
applications = applications.OrderBy(a => a.Tier);
break;
case "Tier_desc":
applications = applications.OrderByDescending(a => a.Tier);
break;
case "Strat":
applications = applications.OrderBy(a => a.Strategy);
break;
case "Strat_desc":
applications = applications.OrderByDescending(a => a.Strategy);
break;
default:
applications = applications.OrderBy(a => a.AppID);
break;
}
int pageSize = 20;
int pageNumber = (page ?? 1);
return View(applications.ToPagedList(pageNumber, pageSize));
}
指数:
<div>
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber)
of @Model.PageCount
@if (Model.HasPreviousPage)
{
@Html.ActionLink("<<", "Index", new { page = 1 })
@Html.Raw(" ");
@Html.ActionLink("< Prev", "Index", new { page = Model.PageNumber - 1 })
}
else
{
@:<<
@Html.Raw(" ");
@:< Prev
}
@if (Model.HasNextPage)
{
@Html.ActionLink("Next >", "Index", new { page = Model.PageNumber + 1 })
@Html.Raw(" ");
@Html.ActionLink(">>", "Index", new { page = Model.PageCount })
}
else
{
@:Next <
@Html.Raw(" ");
@:>>
}
如果任何人有任何的信息对我来说,还是可以点我在这将是惊人的正确方向。 谢谢!
这是非常合情合理的。好,非常感谢你的帮助!我现在工作得很好。 – momofierce 2014-11-05 19:53:15
或只是一个隐藏的输入来保存该值,这是常见的做法,这种方式剃须刀来回传递数据,而不必记住链接中的每个参数 – 2014-11-05 20:49:39
这需要使链接变为一种形式,并使用POST而不是GET ,这是不合适的。 – 2014-11-05 22:15:33