Я строю нумерацию страниц в моем проекте MVC и у меня возникла следующая проблема.Я сделал все для разбивки на страницы, и теперь мне нужно просто передать информацию о странице для просмотра данных.
У меня есть пользовательский элемент управления Pagination:
Pagination.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Pagination.ascx.cs"
Inherits="PIMP.Web.TestForum.Views.Shared.Pagination" %>
<ul id="pagination-flickr">
<% if (ViewData.Model.HasPreviousPage)
{ %>
<li class="previous"><a href="<%=ViewData.PageActionLink.Replace("%7Bpage%7D", (ViewData.PageIndex - 1).ToString())%>">
« Previous</a></li>
<% }
else
{ %>
<li class="previous-off">« Previous</li>
<% } %>
<%for (int page = 1; page <= ViewData.Model.TotalPages; page++)
{
if (page == ViewData.Model.PageIndex)
{ %>
<li class="active">
<%=page.ToString()%></li>
<% }
else
{ %>
<li><a href="<%=ViewData.PageActionLink.Replace("%7Bpage%7D", page.ToString())%>">
<%=page.ToString()%></a></li>
<% }
}
if (ViewData.Model.HasNextPage)
{ %>
<li class="next"><a href="<%=ViewData.PageActionLink.Replace("%7Bpage%7D", (ViewData.PageIndex + 1).ToString())%>">
Next »</a></li>
<% }
else
{ %>
<li class="next-off">Next »</li>
<% } %>
</ul>
<ul id="pagination-flickr0">
<li><a href="<%=ViewData.PageActionLink.Replace("%7Bpage%7D", page.ToString())%>"></a></li>
</ul>
Pagination.ascx.cs:
public partial class PaginationViewData
{
public int PageIndex { get; set; }
public int TotalPages { get; set; }
public int PageSize { get; set; }
public int TotalCount { get; set; }
public string PageActionLink { get; set; }
public bool HasPreviousPage
{
get
{
return (PageIndex > 1);
}
}
public bool HasNextPage
{
get
{
return (PageIndex * PageSize) <= TotalCount;
}
}
}
public partial class Pagination : System.Web.Mvc.ViewUserControl<PaginationViewData>
{
public Pagination()
{
}
}
class PagedList.cs:
namespace PIMP.Web.TestForum.DataObject.Forum
{
public class PagedList<T>: List<T>
{
public PagedList(IQueryable<T> source, int index, int pageSize)
{
this.TotalCount = source.Count();
this.PageSize = pageSize;
this.PageIndex = index;
this.AddRange(source.Skip((index - 1) * pageSize).Take(pageSize).ToList());
int pageResult = 0;
for (int counter = 1; pageResult < this.TotalCount; counter++)
{
pageResult = counter * this.PageSize;
this.TotalPages = counter;
}
}
public PagedList()
{
}
public int TotalPages
{
get;
set;
}
public int TotalCount
{
get;
set;
}
public int PageIndex
{
get;
set;
}
public int PageSize
{
get;
set;
}
public bool HasPreviousPage
{
get
{
return (PageIndex > 1);
}
}
public bool HasNextPage
{
get
{
return (PageIndex * PageSize) <= TotalCount;
}
}
}
public static class Pagination
{
public static PagedList<T> ToPagedList<T>(this IQueryable<T> source, int index, int pageSize)
{
return new PagedList<T>(source, index, pageSize);
}
public static PagedList<T> ToPagedList<T>(this IQueryable<T> source, int index)
{
return new PagedList<T>(source, index, 10);
}
}
}
в поле зрения я делаю следующее:
<% Html.RenderPartial("Pagination", new NISE.Web.TestForum.Views.Shared.PaginationViewData()
{
PageIndex = ViewData.Model.PageIndex,
TotalPages = ViewData.Model.TotalPages,
PageActionLink = Url.Action("Forum", "Thread", new { id = this.Model.Id, page = "{page}" }),
TotalCount = ViewData.Model.TotalCount,
PageSize = ViewData.Model.PageSize
}, null);%>
Я не знаю, чтоЯ должен сделать в моем контроллере.Как я могу передать информацию о странице в ViewData?Мой контроллер выглядит так, вы можете помочь мне расширить его ??
[HttpGet]
[ValidateInput(false)]
public ActionResult Thread(Guid id)
{
try
{
ThreadModel model = new ThreadModel(id);
model.IncreaseHitCount();
PagedList<ListView> list = new PagedList<ListView>();
list.PageIndex = 0;
list.PageSize = 0;
list.TotalCount = 0;
list.TotalPages = 0;
return View(model);
}
catch (Exception ex)
{
bool rethrow = ExceptionHelper.Handle(ex, "Business Logic");
if (rethrow)
{
throw;
}
}
return View();
}