在局部视图中使用分页,asp.net mvc

如果有人可以提供以下建议,我将不胜感激:在我的视图中,我显示了项目列表:

@model PagedList.IPagedList @using PagedList.Mvc; @foreach (var item in Model) {//displaying data} 

我的寻呼机看起来像这样:

 @Html.PagedListPager(Model, page => Url.Action("Index", new { humanID = ViewBag.HumanID, page = page }), new PagedListRenderOptions { LinkToFirstPageFormat = "<>", }) 

问题是当我点击下一页时,它返回空白,没有我的_Layout 。 我不想一直重装_Layout。 有没有办法使用Ajax.ActionLink的寻呼机? 这样我可以在部分视图中UpdateTargedId

您不能使用Ajax.ActionLink,但您可以使用AJAXify链接。 将寻呼机放在

 
@Html.PagedListPager( Model, page => Url.Action( "Index", new { humanID = ViewBag.HumanID, page = page } ), new PagedListRenderOptions { LinkToFirstPageFormat = "<<", LinkToPreviousPageFormat = "prev", LinkToNextPageFormat = "next", LinkToLastPageFormat = ">>", } )

然后AJAXify链接:

 $(function() { $('#myPager').on('click', 'a', function() { $.ajax({ url: this.href, type: 'GET', cache: false, success: function(result) { $('#some_grid_container').html(result); } }); return false; }); }); 

请注意,在success回调中我使用了$('#some_grid_container') ,这应该是整个表周围的一些包装div。

仍然有一种方法可以使用PagedList实现Ajax。

 @Html.PagedListPager((IPagedList)Model, page => Url.Action("Index", new { humanID= ViewBag.HumanID, page }), PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing(PagedListRenderOptions.PageNumbersOnly, new AjaxOptions { InsertionMode = InsertionMode.Replace, HttpMethod = "Get", UpdateTargetId = "targetContainer" })) 

这篇文章将发出ajax请求并用“targetContainer”替换内容。 它为您提供了更多关于Ajax调用以及您希望如何显示它的选项。

我的项目设置:MVC4,MvcPaging(PagedList),带区域。 这个答案适合于那种设置。

简答:
在为寻呼机配置AjaxOptions时,请确保设置区域 (正确)

 new AjaxOptions { UpdateTargetId = "grid-list" , OnBegin = "beginPaging", OnSuccess = "successPaging", OnFailure = "failurePaging"} , new { area = "Admin", controller = "MyController", action = "Index"} 

答案很长:
PagedList示例显示如何传递到某个区域并在区域内进行分页,但它们没有显示如何使用部分视图进行分页的示例。

示例项目具有以下代码(取自_AjaxEmployeeList.cshtml):

 }, new AjaxOptions { UpdateTargetId = "grid-list", OnBegin = "beginPaging", OnSuccess = "successPaging", OnFailure = "failurePaging" }, new { controller = "Home", action = "Index", employee_name = ViewData["employee_name"] })) 

PagedList示例在foreach中使用内联表,因此您不会遇到与此设置有任何问题/冲突。

 @using MvcPaging @model IPagedList  @foreach (var item in Model) {  } 
@item.ID

在将此表重构为部分视图(封装逻辑(以及处理分页))时,我开始得到“未找到部分视图’_MyPartialView’或者没有视图引擎支持搜索的位置”

 @using MvcPaging @using MyProject.Models @model IPagedList foreach (var item in Model) { 
@Html.Partial("_Detail", item)
}

我尝试了强制该区域进入Html.Partial()调用的更改,包括:
修改如何处理路由, 这不起作用
如何在MVC中设置默认路由(到一个区域)
完全限定部分视图的路径, 这确实有效,但很难看
mvc3 – 在不同区域使用部分视图
对部分视图加载的研究向我展示了MVC引擎如何处理请求。 这让我回到修改Ajax寻呼机,发送每个请求的区域。 我尝试使用与Html.ActionLink类似的语法。 (这没有/不起作用)

 @Html.ActionLink("Admin", "Index", "Admin", new { area = "Admin" }, null) 

这没有用,所以其他所有方法都失败了,我反映了设置控制器的模式,这导致我们:

 new AjaxOptions { UpdateTargetId = "grid-list" , OnBegin = "beginPaging", OnSuccess = "successPaging", OnFailure = "failurePaging"} , new { area = "Admin", controller = "MyController", action = "Index"} 

我个人的教训是:C#!= Razor!= Javascript。 每个人做的事情都略有不同,你必须确定你知道你的写作行是用哪种语言。