paging in asp.net mvc

后端 未结 4 1587
忘掉有多难
忘掉有多难 2021-01-23 03:11

i have an asp.net website where i do paging through on the code behind using:

    PagedDataSource objPds = new PagedDataSource
                                 {         


        
相关标签:
4条回答
  • 2021-01-23 03:51

    There is a good paging class example in the Nerd Dinner project:

    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 讨论(0)
  • 2021-01-23 04:01

    I will explain the way to implement pagination in 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 讨论(0)
  • 2021-01-23 04:08

    I would just define a custom route with the page number in it:

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

    Will give you this kind of Url:

    http://localhost/books/4/
    

    Then in your controller action you get this page number:

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

    So your view will not actually be aware of the current page. It will just display a list of supplied records.

    You will also need to generate links to various pages either in this view directly or maybe in your master page.

    0 讨论(0)
  • 2021-01-23 04:11

    If you buy:
    Professional ASP.NET MVC 1.0 (Wrox Programmer to Programmer)

    The section in there about Ajax and JsonResult ... very good walkthrough of how to set up both an javascript and non-javascript solution. I haven't actually implemented it, so I don't remember too much about it, I just remember when I read it, I thought it would work perfectly for paging on my new site.

    Decent tutorial here as well:
    http://www.asp.net/learn/mvc/tutorial-32-cs.aspx

    0 讨论(0)
提交回复
热议问题