@model PagingData @{ bool has_previous = Model.CurrentPage > 0; bool has_next = Model.CurrentPage < Model.LastPage; int first_page = Math.Max( 0 , Model.CurrentPage - 3 ); int last_page = Math.Min( first_page + 6 , Model.LastPage ); if ( last_page - first_page < 6 ) first_page = Math.Max( 0 , last_page - 6 ); bool show_dots_before = first_page > 0; if ( show_dots_before ) first_page += 2; // shift first page to make room for [1][...] bool show_dots_after = last_page < Model.LastPage; if (show_dots_after) last_page -= 2; // shift last page to make room for [...][last] } @if ( Model.LastPage > 0 ) { }