質問

こんにちは、ビューのページングを提供する私のコードです。

<div style="float: right;">
        <%= Html.RouteLink("<<", new { page = 1 }, new { title = "first page" })%>
        <% if (this.Model.HasPreviousPage)
           {%>

        <%= Html.RouteLink("<", new { page = (Model.PageIndex - 1) }, new { title = "previous page"})%>
        <%} %>

        <%  
            for (int i = 1; i <= this.Model.PageIndex + 2; i++)
            { if(i <= this.Model.TotalPages){
                 %>

        <%= Html.ActionLink(Convert.ToString(i), "Overview", new { page = i }, new { title = i + " page"})%>
        <% }}%>

        <% if (this.Model.HasNextPage)
           {%>

        <%= Html.RouteLink(">", new { page = (Model.PageIndex + 1) }, new { title = "next page"})%>
        <%} %>
        <%= Html.RouteLink(">>", new { page = Model.TotalPages }, new { title = "last page" })%>
    </div>

次のようになります:

<< 1 2 3 > >>

選択したページの前後2ページだけを常に表示したいのですが。私が 4 ページにいる場合、このように前の 3 ページすべてが表示されます。

<< < 1 2 3 **4** > >>

どうすればいいですか、助けてください。現時点では頭の中に少しストックがあるのですが、これを操作する方法がわかりません。

私のモデルにはページング用の次のデータがあります。

  /// <summary>
        /// Gets the boolean value of previous page
        /// </summary>
        public bool HasPreviousPage
        {
            get
            {
                return (PageIndex > 1);
            }
        }

        /// <summary>
        /// Gets the boolean value of next page
        /// </summary>
        public bool HasNextPage
        {
            get
            {
                return (PageIndex + 1 <= TotalPages);
            }
        }

        /// <summary>
        /// gets total pages of overview.aspx
        /// </summary>
        public int TotalPages
        {
            get
            {
                return _totalPages;
            }
            set
            {
                _totalPages = value;
            }
        }

        /// <summary>
        /// gets total count 
        /// </summary>
        public int TotalCount
        {
            get
            {
                return _totalCount;
            }
            set
            {
                _totalCount = value;
            }
        }

        /// <summary>
        /// gets actual page index
        /// </summary>
        public int PageIndex
        {
            get
            {
                return _pageIndex;
            }
            set
            {
                _pageIndex = value;
            }
        }

        /// <summary>
        /// gets page size
        /// </summary>
        public int PageSize
        {
            get
            {
                return _pageSize;
            }
            set
            {
                _pageSize = value;
            }
        }




 PageSize = 5;
                PageIndex = page;
                TotalCount = Threads.Count;
                TotalPages = TotalCount / PageSize;

                int pageResult = 0;
                for (int counter = 1; pageResult < this.TotalCount; counter++)
                {
                    pageResult = counter * this.PageSize;
                    TotalPages = counter;
                }

                FirstThreads = new List<Thread>();
                FirstThreads.AddRange(Threads.Skip<Thread>((PageIndex - 1) * PageSize).Take<Thread>(PageSize));
役に立ちましたか?

解決

まず第一に、ビューはかなり複雑です。

HTML 拡張メソッドを使用して、UI とページングの両方を簡素化してみてはいかがでしょうか?

周りにはたくさんの例がありますが、私は個人的に気に入っています これ 1つ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top