@model BasePagingViewModel @{ var pageSizeOptions = new[] { 50, 100, 250, 500 }; } @if (Model.Total is null || Model.Total.Value > pageSizeOptions.Min()) { } @{ string NavigatePages(int prevNext, int count) { var skip = Model.Skip; if (prevNext == -1) { skip = Math.Max(0, Model.Skip - Model.Count); } else if (prevNext == 1) { skip = Model.Skip + count; } var query = new Dictionary { { "searchTerm", Model.SearchTerm }, { "timezoneOffset", Model.TimezoneOffset }, { "skip", skip }, { "count", count } }; if (Model.PaginationQuery != null) { // merge both, preferring the `query` properties in case of duplicate keys query = query.Concat(Model.PaginationQuery) .GroupBy(e => e.Key) .ToDictionary(g => g.Key, g => g.First().Value); } return Url.Action(null, query); } }