ASP.NET MVC PaginatedList Pager - ставить мудрый "..." после определенного момента - PullRequest
0 голосов
/ 13 сентября 2011

Я создал paginatedList и пейджер для этого для моего проекта ASP.NET MVC.Это прекрасно работает, хорошо, что так.

Одна вещь, которую я не могу понять, это то, как поставить ... после определенного момента.Например, допустим, мой пейджер выглядит следующим образом:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 Next >>>

Мне нужно кое-что из следующего:

1 2 3 4 5 6 7 8 9 10 ... Next >>>

... здесь для 11 здесь.Когда мы переходим на страницу 11, пейджер должен выглядеть следующим образом:

... 11 12 13 14 Next >>>

Эта реализация являетсятот, который я не могу понять, как это сделать.

А вот как выглядит мой текущий код пейджера:

<div id="pager">

    @if (Model.PrimaryModel.HasPreviousPage) {
        @:@Html.ActionLink(
            "<<< Previous", 
            Model.Property["action"], 
            new { 
                controller = Model.Property["controller"], 
                Area = Model.Property["area"], 
                page = (Model.PrimaryModel.PageIndex - 1) 
            }, 
            new { 
                data_jquery_ajax_url = Url.Action(
                    string.Format("pagerAjaxCall_{0}", Model.Property["action"]), 
                    new { 
                        controller = Model.Property["controller"], 
                        Area = Model.Property["area"], 
                        page = (Model.PrimaryModel.PageIndex - 1) 
                    }
                ) 
            }
        )
    }

    @if (Model.PrimaryModel.TotalPages >= 2) {

        int totalPageNumber = 0;

        for (int i = 0; i < Model.PrimaryModel.TotalPages; i++) {

            int value = i + 1;

            if (Model.PrimaryModel.PageIndex == i) {
                @:@Html.ActionLink(value.ToString(), Model.Property["action"], new { controller = Model.Property["controller"], Area = Model.Property["area"], page = (i) }, new { @class = "active-page", data_jquery_ajax_url = Url.Action(string.Format("pagerAjaxCall_{0}", Model.Property["action"]), new { controller = Model.Property["controller"], Area = Model.Property["area"], page = (i) }) })
            } else { 
                @:@Html.ActionLink(value.ToString(), Model.Property["action"], new { controller = Model.Property["controller"], Area = Model.Property["area"], page = (i) }, new { data_jquery_ajax_url = Url.Action(string.Format("pagerAjaxCall_{0}", Model.Property["action"]), new { controller = Model.Property["controller"], Area = Model.Property["area"], page = (i) }) })
            }

            totalPageNumber++;
        }

        @*@:current : @(Model.PrimaryModel.PageIndex+1), totalPage @totalPageNumber.ToString(), right side @((totalPageNumber - Model.PrimaryModel.PageIndex)-1), left side @(totalPageNumber - (totalPageNumber - Model.PrimaryModel.PageIndex))*@
    }

    @if (Model.PrimaryModel.HasNextPage) {
        @:@Html.ActionLink(
            "Next >>>", 
            Model.Property["action"], 
            new { 
                controller = Model.Property["controller"], 
                Area = Model.Property["area"], 
                page = (Model.PrimaryModel.PageIndex + 1) 
            }, 
            new { 
                data_jquery_ajax_url = Url.Action(
                    string.Format("pagerAjaxCall_{0}", Model.Property["action"]), 
                    new { 
                        controller = Model.Property["controller"], 
                        Area = Model.Property["area"], 
                        page = (Model.PrimaryModel.PageIndex + 1) 
                    }
                ) 
            }
        )
    }

</div>

Есть мысли?

1 Ответ

1 голос
/ 14 сентября 2011

Просто должен дать вам общее представление о том, как это исправить

var start = Model.PrimaryModel.PageIndex > 10 ? Model.PrimaryModel.PageIndex : 0;

if (start > 0) { //create "..." }
for (int i = start; i <= Model.PrimaryModel.TotalPages && i < start + 10; i++) 
{ 
    //generate pages
}
if (start + 10 < 0 Model.PrimaryModel.TotalPages) { //create "..." }
...