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 に答える
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 Pager を変更して、各要求で領域を送信するようになりました。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 に答える