MVC PagedList向服务器发送奇怪的请求

时间:2015-04-15 10:11:04

标签: c# asp.net-mvc pagination pagedlist

我正在使用带有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的限制吗?或者我错过了什么?

1 个答案:

答案 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" }))

不可否认,这种解决方案充其量也很差。你只能拥有整个列表中的一个选项(所以如果你已经在其他地方使用了其他选项,你可以忘记它)并且你对请求没有任何控制,所以除非你想要挂钩,否则定制在这里真的不是一个选择电话。

无论如何,这就是我修复它的方式,希望将来能帮助某人!