2016-09-04 6 views
0

私はかなりの間これを苦労しました。今日私はついに次のコードを書いた。Asp.Net MVCでのページングリンクの最小化

ViewModelにはintプロパティが含まれています。このプロパティは後でデータが分割されたページの数を表示します。

コントローラは、指定された行数を取ることによって、データを分割して、ページングが発生した場合に、pageNumber * recordsPerPage

を見てみましょうによって分割:

のViewModel

public class ThreadPostsViewModel 
{ 
    public Thread Thread { get; set; } 
    public List<Post> Posts { get; set; } 
    public int Pages { get; set; } 
} 

コントローラ

このコードは

表示

@model Ortund.Models.ThreadPostsViewModel 
<div class="paging"> 
    @for (int i = 1; i < Model.Pages; i++) 
    { 
     string Url = String.Format("/View/Thread/{0}?page={1}", Model.Thread.Id, i); 

     <a href="@Url">@i</a> 
    } 
</div> 
<div class="posts-list"> 
    @foreach (var Post in Model.Posts) 
    { 
     <div class="post" id="@Post.Id"> 

     </div> 
    } 
</div> 

、300枚のポストを仮定することは、データベースから選択され、10枚のポストをページごとに指定され、その後、30ページがあるべきです。

あなたのページデザインに収まる膨大な量のリンクであっても、これらのページングリンクを最小限に抑えて表示するにはどうすればいいですか?例えば、10ページングリンクは、8ページ目でリンクがたとえば、3-13を示していますか?

が好ましいであろう次のようにしても、ページングのリンクのディスプレイを有する:

現在のページのコントローラに置く値で
1 2 3 4 5 ... 90 91 92 93 94 
+0

[Mvc.PagedListソースコード](https://github.com/troygoode/PagedList)を見てください。 'Posts'が最大値の' PostsPerPage'を持っているので 'Pages = Posts.Count/PostsPerPage'の現在のコードは0または1を返します) –

答えて

1

ビューで
ViewBag.currentPage = page; 

あなたはこのような何かを行うことができます(テストしていません) :

<div class="paging"> 
@if (Model.Pages > 11 && ViewBag.currentPage > 6) 
{ 
     for (int i = ViewBag.currentPage - 6; i < ViewBag.currentPage -1; i++) 
     { 
      string Url = String.Format("/View/Thread/{0}?page={1}", Model.Thread.Id, i); 
      <a href="@Url">@i</a> 
     } 
     for (int i = ViewBag.currentPage + 1; i < ViewBag.currentPage + 6; i++) 
     { 
      string Url = String.Format("/View/Thread/{0}?page={1}", Model.Thread.Id, i); 
      <a href="@Url">@i</a> 
     } 
} 
else 
{ 
     for (int i = 1; i < Model.Pages; i++) 
     { 
      string Url = String.Format("/View/Thread/{0}?page={1}", Model.Thread.Id, i); 
      <a href="@Url">@i</a> 
     } 
} 
</div> 
+0

これはうまくいきますが、編集をお勧めします。最後のforでは、表示するリンクの量を表す固定量にループを実行する必要があります。私の場合、これは10個のリンクしか表示されないようにしました。 'for(int i = 1; i <11; i ++)' – Ortund

+0

Last forループは、使用可能なページが10個以下の場合に実行する必要があります。問題。あなたはそれを試しましたか? – OctoCode

関連する問題