如果有人可以提供以下建议,我将不胜感激: 在我看来,我显示了项目列表:
@model PagedList.IPagedList<Items>
@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 = "<<",
LinkToPreviousPageFormat = "prev",
LinkToNextPageFormat = "next",
LinkToLastPageFormat = ">>",
})
问题在于,当我点击下一页时,它将返回空白,而不是我的_Layout
。我不想一直重装_Layout。有没有办法使用Ajax.ActionLink for pager?这样我可以在我的局部视图中UpdateTargedId
吗?
答案 0 :(得分:28)
您不能使用Ajax.ActionLink,但您可以使用AJAXify链接。将寻呼机放在<div>
:
<div id="myPager">
@Html.PagedListPager(
Model,
page => Url.Action(
"Index",
new {
humanID = ViewBag.HumanID,
page = page
}
),
new PagedListRenderOptions
{
LinkToFirstPageFormat = "<<",
LinkToPreviousPageFormat = "prev",
LinkToNextPageFormat = "next",
LinkToLastPageFormat = ">>",
}
)
</div>
然后AJAX化链接:
$(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。
答案 1 :(得分:7)
还有一种方法可以使用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调用以及您希望如何显示它的选项。
答案 2 :(得分:3)
我的项目设置: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<MvcPagingDemo.Models.Employee>
<table class="table table-bordered table-hover">
@foreach (var item in Model)
{
<tr>
<td>@item.ID</td>
</tr>
}
</table>
在将此表重构为部分视图(封装逻辑(以及处理分页))时,我开始得到“未找到部分视图'_MyPartialView'或者没有视图引擎支持搜索的位置” 强>
@using MvcPaging
@using MyProject.Models
@model IPagedList<MyProject.Models.MyModel>
foreach (var item in Model)
{
<div data-task-id="@item.MyModel_ID.ToString()">
@Html.Partial("_Detail", item)
</div>
}
我尝试了强制该区域进入Html.Partial()调用的更改,包括:
修改路由的处理方式,不起作用
How to set a Default Route (To an Area) in MVC
完全限定部分视图的路径,确实有效,但很丑陋
mvc3 - using partial views in a different area
对部分视图加载的研究向我展示了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。每个人做的事情都略有不同,你必须确定你知道你的写作行是用哪种语言。