ASP.NET MVC PaginatedList寻呼机-明智地使用"..."在某点之后 [英] ASP.NET MVC PaginatedList Pager - Put wise "..." after certain point

查看:83
本文介绍了ASP.NET MVC PaginatedList寻呼机-明智地使用"..."在某点之后的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我为我的ASP.NET MVC项目创建了一个paginatedList和分页器.它很棒,很好.

我无法弄清楚的一件事是如何将...放在特定点之后.例如,假设我的寻呼机如下所示:

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>

有什么想法吗?

解决方案

仅应给您一个大致的解决方案

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 "..." }

I have created a paginatedList and pager for that for my ASP.NET MVC project. It works great, well thing so.

One thing that I cannot figure it out is to how to put ... after certain point. For example, lets say my pager looks like as follows :

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

What I need is some thing as follows :

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

the ... is for 11 here. When we go to page 11, the pager should be as follows :

... 11 12 13 14 Next >>>

This implementation is the one which I cannot figure it out how to do this.

And here is how my current pager code looks like :

<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>

Any thoughts?

解决方案

Just should give you a general idea of how to fix it

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 "..." }

这篇关于ASP.NET MVC PaginatedList寻呼机-明智地使用"..."在某点之后的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆