13

如果有人可以就以下内容提出建议,我将不胜感激:在我看来,我显示了项目列表:

@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 用于寻呼机?这样我就可以UpdateTargedId进入我的局部视图?

4

3 回答 3

32

你不能使用 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>

然后 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。

于 2013-09-16T07:27:08.900 回答
8

仍然有一种方法可以使用 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 调用以及您希望显示的方式的选项。

于 2014-09-06T21:07:26.493 回答
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() 调用的更改,包括:
修改路由的处理方式,这不起作用
如何在 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。每个人做的事情都略有不同,你必须确保你知道你的写作是针对哪种语言的。

于 2013-11-27T18:04:40.680 回答