How to add properties to a previously created object
I'm not sure if what I'm trying to do makes sense. I am attempting to make a portable pagination widget to use in asp.net mvc.

The tricky part is that I'm storing an object for route values.

    public class PaginatedList<T> : List<T>
    {
        public PaginationData PaginationData { get; private set; }

        public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize)
        {
            PaginationData = new PaginationData( source.Count() , pageIndex, pageSize);
            this.AddRange(source.Skip((PaginationData.PageIndex - 1) * PaginationData.PageSize).Take(PaginationData.PageSize));
        }

    }

    public class PaginationData
    {
        ////////////////////////////////////////////
        public object PageRoute { get; set; } //   <-- object for route values
        ////////////////////////////////////////////
        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);
        }
    }

So I can then define the base route info at the controller level like this:

            PaginatedList<Member> paginatedMembers = new PaginatedList<Member>(members, page, 2);
            // define base url route
            paginatedMembers.PaginationData.PageRoute = new { controller = "AdminMember", action = "MemberList", keyword = keyword };

This allows me to add values like `keyword=keyword` for the case where the page links should have additional data.

Then The pagination is displayed with a shared, partial view:

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Genesis_0_02.Utilities.PaginationData>" %>

    <% if (Model.HasPreviousPage) { %> 
            <%: Html.ActionLink("Previous", ViewContext.RouteData.Values["action"].ToString(), new { page = (Model.PageIndex - 1) })%>

        <% } %> 
        <% for (int i = 1; i <= Model.TotalPages; i++) %>
        <% { %>
                <!--How do I add {page=i} to Model.PageRoute object below?-->
                <%: Html.RouteLink(i.ToString(), Model.PageRoute)%>

        <% } %>

        <% if (Model.HasNextPage) {  %> 
            <%: Html.ActionLink("Next", ViewContext.RouteData.Values["action"].ToString(), new { page = (Model.PageIndex + 1) })%>
        <% } %> 

As you can see... the above partial view is not completed yet. I am specifically working on this line: 

                <!--How do I add {page=i} to Model.PageRoute object below?-->
                <%: Html.RouteLink(i.ToString(), Model.PageRoute)%>

Is there a way to do this?
How to add properties to a previously created object
===

I'm not sure if what I'm trying to do makes sense. I am attempting to make a portable pagination widget to use in asp.net mvc.

The tricky part is that I'm storing an object for route values.

    public class PaginatedList<T> : List<T>
    {
        public PaginationData PaginationData { get; private set; }

        public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize)
        {
            PaginationData = new PaginationData( source.Count() , pageIndex, pageSize);
            this.AddRange(source.Skip((PaginationData.PageIndex - 1) * PaginationData.PageSize).Take(PaginationData.PageSize));
        }

    }

    public class PaginationData
    {
        ////////////////////////////////////////////
        public object PageRoute { get; set; } //   <-- object for route values
        ////////////////////////////////////////////
        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);
        }
    }

So I can then define the base route info at the controller level like this:

            PaginatedList<Member> paginatedMembers = new PaginatedList<Member>(members, page, 2);
            // define base url route
            paginatedMembers.PaginationData.PageRoute = new { controller = "AdminMember", action = "MemberList", keyword = keyword };

This allows me to add values like `keyword=keyword` for the case where the page links should have additional data.

Then The pagination is displayed with a shared, partial view:

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Genesis_0_02.Utilities.PaginationData>" %>

    <% if (Model.HasPreviousPage) { %> 
            <%: Html.ActionLink("Previous", ViewContext.RouteData.Values["action"].ToString(), new { page = (Model.PageIndex - 1) })%>

        <% } %> 
        <% for (int i = 1; i <= Model.TotalPages; i++) %>
        <% { %>
                <!--How do I add {page=i} to Model.PageRoute object below?-->
                <%: Html.RouteLink(i.ToString(), Model.PageRoute)%>

        <% } %>

        <% if (Model.HasNextPage) {  %> 
            <%: Html.ActionLink("Next", ViewContext.RouteData.Values["action"].ToString(), new { page = (Model.PageIndex + 1) })%>
        <% } %> 

As you can see... the above partial view is not completed yet. I am specifically working on this line: 

                <!--How do I add {page=i} to Model.PageRoute object below?-->
                <%: Html.RouteLink(i.ToString(), Model.PageRoute)%>

Is there a way to do this?