Вы можете изменить свой класс PaginationData примерно так:Примечание: я переименовал свойство PageRoute
в RouteValues
для согласованности с платформой MVC.
public class PaginationData
{
private System.Web.Routing.RouteValueDictionary _RouteValues;
public System.Web.Routing.RouteValueDictionary RouteValues
{
get
{
if (_RouteValues == null)
{
_RouteValues = new System.Web.Routing.RouteValueDictionary();
}
return _RouteValues;
}
private set { _RouteValues = value; }
}
public void SetRouteValues(object routeValues)
{
this.RouteValues = new System.Web.Routing.RouteValueDictionary(routeValues);
}
public bool HasPreviousPage { get { return (PageIndex > 1); } }
public bool HasNextPage { get { return (PageIndex < TotalPages); } }
public int PageIndex { get; private set; }
public int PageSize { get; private set; }
public int TotalCount { get; private set; }
public int TotalPages { get; private set; }
public PaginationData(int count, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
PageSize = pageSize;
TotalCount = count;
TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize);
}
}
Затем можно добавить значения маршрута, выполнив следующие действия:
Model.RouteValues.Add("key", value);
или
Model.RouteValues["key"] = value;
Альтернативный подход с использованием методов расширения для объединения RouteValueDictionaries
Ниже приведены некоторые методы расширения, которые предоставляют некоторые функции для RouteValueDictionaries.
public static class RouteValueExtensions
{
public static void Merge(this RouteValueDictionary routeValuesA, object routeValuesB)
{
foreach (var entry in new RouteValueDictionary(routeValuesB))
{
routeValuesA[entry.Key] = entry.Value;
}
}
public static RouteValueDictionary With(this RouteValueDictionary routeValuesA, object routeValuesB)
{
routeValuesA.Merge(routeValuesB);
return routeValuesA;
}
public static RouteValueDictionary With(this RouteValueDictionary routeValues, params object[] routeValuesToMerge)
{
if (routeValues != null)
{
for (int i = 0; i < routeValuesToMerge.Length; i++)
{
routeValues.Merge(routeValuesToMerge[i]);
}
}
return routeValues;
}
public static RouteValueDictionary RouteValues(this HtmlHelper htmlHelper, object routeValues)
{
return new RouteValueDictionary(routeValues);
}
public static RouteValueDictionary RouteValues(this HtmlHelper htmlHelper, object routeValuesA, object routeValuesB)
{
return htmlHelper.RouteValues(routeValuesA).With(routeValuesB);
}
public static RouteValueDictionary RouteValues(this HtmlHelper htmlHelper, params object[] routeValues)
{
if (routeValues != null && routeValues.Length > 0)
{
var result = htmlHelper.RouteValues(routeValues[0]);
for (int i = 1; i < routeValues.Length; i++)
{
result.Merge(routeValues[i]);
}
return result;
}
else
{
return new RouteValueDictionary();
}
}
}
В этом случаеЯ думаю, что вы могли бы использовать их с вашей первоначальной реализацией модели, например:
Html.RouteLink(i.ToString(), Html.RouteValues(Model.PageRoute, new { page = i }))
или
Html.RouteLink(i.ToString(), Html.RouteValues(Model.PageRoute).With(new { page = i }))
Недостатком является то, что происходит некоторое чрезмерное отражение и создание новых объектов RouteValueDictionary, происходящих в данный момент.с таким подходом.