пейджинг в asp.net mvc - PullRequest
       27

пейджинг в asp.net mvc

2 голосов
/ 10 августа 2009

У меня есть веб-сайт asp.net, на котором я пролистываю код, использующий:

    PagedDataSource objPds = new PagedDataSource
                                 {
                                     DataSource = ds.Tables[0].DefaultView,
                                     AllowPaging = true,
                                     PageSize = 12
                                 };

каков эквивалентный лучший способ подкачки страниц для asp.net-mvc. Я думаю, что это на самом деле принадлежит к коду представления.

Ответы [ 4 ]

11 голосов
/ 10 августа 2009

Я бы просто определил собственный маршрут с номером страницы в нем:

routes.MapRoute(
                "Books", // Route name
                "books/{page}", // URL with parameters
                new {controller = "Books", action = "List", page = 1}
                );

Даст вам такой URL:

http://localhost/books/4/

Тогда в вашем контроллере вы получите номер этой страницы:

public BooksController
{
    public ActionResult List (int page)
    {
        /* Retrieve records for the requested page from the database */

        return View ();
    }
}

Таким образом, ваше мнение фактически не будет знать о текущей странице. Он просто отобразит список предоставленных записей.

Вам также потребуется создать ссылки на различные страницы либо в этом представлении напрямую, либо, возможно, на главной странице.

5 голосов
/ 10 августа 2009

В проекте Nerd Dinner есть хороший пример подкачки:

public class PaginatedList<T> : List<T> {

        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 PaginatedList(IQueryable<T> source, int pageIndex, int pageSize) {
            PageIndex = pageIndex;
            PageSize = pageSize;
            TotalCount = source.Count();
            TotalPages = (int) Math.Ceiling(TotalCount / (double)PageSize);

            this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));
        }

        public bool HasPreviousPage {
            get {
                return (PageIndex > 0);
            }
        }

        public bool HasNextPage {
            get {
                return (PageIndex+1 < TotalPages);
            }
        }
0 голосов
/ 21 ноября 2015

Я объясню способ реализации нумерации страниц в asp.net mvc.

ProductController.cs

private ProductContext db = new ProductContext ();

public ActionResult Index()
{
    string pageString = "";
    try
    {
        pageString = Request.Url.Segments[3];
    }
    catch (Exception)
    {
        pageString = null;
    }

    int page = (String.IsNullOrEmpty(pageString)) ? 1 : Int32.Parse(pageString);
    Product userModel = new Product();
    int totalProducts = userModel.GetTotalProducts();

    PaginationFunction pagination = new PaginationFunction(true);
    pagination.BaseUrl = "/Product/Index/";
    pagination.TotalRows = totalProducts;
    pagination.CurPage = page;
    pagination.PerPage = 5;
    pagination.PrevLink = "Prev";
    pagination.NextLink = "Next";
    string pageLinks = pagination.GetPageLinks();
    int start = (page - 1) * pagination.PerPage;
    int offset = pagination.PerPage;

    List<Product> products = userModel.GetProducts(start, offset);

    ViewData["title"] = "Pagination in Asp.Net Mvc";
    ViewData["totalProducts"] = totalProducts;
    ViewData["products"] = products;
    ViewData["pageLinks"] = pageLinks;

    return View(db.Products.ToList());
}

ProductModel.cs

public class Product
    {
        private ProductContext db = new ProductContext ();

        public int GetTotalProducts()
        {
            return db.Products.Count();
        }

        public List<Product> GetProducts()
        {
            return db.Products.ToList();
        }
        public List<Product> GetProducts(int start, int offset)
        {
            IEnumerable<Product> query = from m in db.Products
                                       orderby m.Id descending
                                       select m;
            query = query.Skip(start).Take(offset);
            return query.ToList();
        }

    }

index.aspx

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
    <h2>View Users</h2>
    <p>
    <%: Html.ActionLink("Create New", "Create") %>
    </p>
    <p>Total Users: <strong><%= ViewData["totalProducts"] %></strong></p>

    <% if ((int)ViewData["totalProducts"] == 0)
       { %>
        <p>Sorry! No Users Found.</p>
    <% }
       else
       { %>    
    <table border="0" cellspacing="0" cellpadding="0" width="100%" class="list">
        <tr>
            <th>Name</th>
            <th>Price</th>
            <th>CreatedDate</th>
            <th>UpdatedDate</th>
            <th></th>
        </tr>

        <% foreach (Product u in (List<Product>)ViewData["products"]) 
           { %>        
            <tr>
                <td><%= u.Name%></td>
                <td><%= u.Price %></td>
                <td><%= u.CreatedDate %></td>
                <td><%= u.UpdatedDate%></td>
                <td>
                    <%: Html.ActionLink("Edit", "Edit", new { id=u.Id }) %> |
                    <%: Html.ActionLink("Details", "Details", new { id=u.Id }) %> |
                    <%: Html.ActionLink("Delete", "Delete", new { id=u.Id }) %>
                </td>
            </tr> 
        <% } %>
    </table>

        <br />
        <% if ((string)ViewData["pageLinks"] != "")
           { %>
           <%= ViewData["pageLinks"] %>
           <br /><br />
        <% } %>       
    <% } %>
</asp:Content>
0 голосов
/ 10 августа 2009

Если вы покупаете:
Профессиональный ASP.NET MVC 1.0 (программист Wrox для программиста)

Раздел, посвященный Ajax и JsonResult ... очень хорошее пошаговое руководство по настройке как javascript, так и non-javascript решений. Я на самом деле не реализовал это, поэтому я не слишком много об этом помню, я просто помню, когда читал, я думал, что это отлично подойдет для подкачки на моем новом сайте.

Достойный урок и здесь:
http://www.asp.net/learn/mvc/tutorial-32-cs.aspx

...