我正在使用带有PagedList的MVC,以便将一个大表分成多个页面。
现在,在网络浏览器中,这是我看到的: http://localhost:49370/Home/Pending?page=2
哪个有道理。但是,在向服务器发送请求时,这是服务器收到的内容:http://localhost:49370/Home/WhereAmI?_=1429091783507
这是一个巨大的混乱,反过来又使得无法将用户重定向到列表中的特定页面,因为我不知道用户当前正在查看的页面是什么!
控制器代码:
public ActionResult Pending(int? page)
{
//I have a ViewModel, which is MaterialRequestModel
IEnumerable<MaterialRequestModel> model = DB.GATE_MaterialRequest
.Select(req => new MaterialRequestModel(req))
.ToList();
int pageNum = page ?? 1;
return View(model.ToPagedList(pageNum, ENTRIES_PER_PAGE));
}
查看代码:
@model IEnumerable<MaterialRequestModel>
<table>
//table stfuff
</table>
<div style="display: block;text-align: center">
@Html.PagedListPager((PagedList.IPagedList<MaterialRequestModel>)Model, page => Url.Action("Pending", new { page }), PagedListRenderOptions.ClassicPlusFirstAndLast)
</div>
这是MVC PagedList的限制吗?或者我错过了什么?
答案 0 :(得分:0)
恰好,PagedList不会将此类信息发送到服务器。相反,如果您想知道正在查看哪个页面,则必须使用具有该信息的自定义模型,如果您想要请求使用ajax(此处为原始目标),则必须使用特殊选项:< / p>
@Html.PagedListPager(Model.requests, page => Url.Action("SearchTable", "Home",
new
{
employeesQuery = Model.query.employeesQuery, //your query here
pageNum = page
}
), PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing(new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "tableAndPaginationDiv", OnComplete = "initiatePendingTableDisplay" }))
不可否认,这种解决方案充其量也很差。你只能拥有整个列表中的一个选项(所以如果你已经在其他地方使用了其他选项,你可以忘记它)并且你对请求没有任何控制,所以除非你想要挂钩,否则定制在这里真的不是一个选择电话。
无论如何,这就是我修复它的方式,希望将来能帮助某人!