2016-12-26 73 views
1

我如何添加自定义分页到我的应用程序,它是用C#MVC5在Bootstrap中使用数据库和实体框架6编写的?如何在ASP.net MVC 5中进行自定义分页取决于引导?

+1

是一个问题吗?请使用博客发布技术文章。 – Prasoon

+0

虽然它被鼓励在stackoverflow回答你自己的问题,并发布你已经有一个解决方案的问题,你应该写一个问题描述的实际问题,你的答案答案,以便它可以找到其他人,也可以被别人回答可能是更好的解决方案。不要(基本上)写“我写了一些代码,这是它”。目前,你的实际问题只是一行,并不能作为堆栈溢出的一个好问题。并从您的答案中删除“最佳途径......”,您可能会对解决您的问题的不同方式感到惊讶。 – Solarflare

+0

谢谢,它现在更新 –

回答

1

这是我的代码和它的正常工作:

注:此页面的代码需要引导是存在

在模型中添加新的文件名为paging.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Mvc.Ajax; 
using System.Web.Security; 

namespace project.Models 
{ 
    public class Paging 
{ 
    private projectEntities db = new projectEntities(); 

    public string Pagination(int total, int page, int Take, int offset, string Controler, string View, string Params) 
    { 
     if (total > 0) 
     { 
      string c_url = HttpContext.Current.Request.Url.AbsoluteUri.ToLower(); 
      string URL = c_url.Substring(0, c_url.IndexOf(Controler.ToLower())); 
      double rowPerPage = Take; 
      if (Convert.ToDouble(total) < Take) 
      { 
       rowPerPage = Convert.ToDouble(total); 
      } 

      int totalPage = Convert.ToInt16(Math.Ceiling(Convert.ToDouble(total)/rowPerPage)); 
      int current = page; 
      int record = offset; 
      int pageStart = Convert.ToInt16(Convert.ToDouble(current) - Convert.ToDouble(offset)); 
      int pageEnd = Convert.ToInt16(Convert.ToDouble(current) + Convert.ToDouble(offset)); 
      string numPage = ""; 
      if (totalPage < 1) return ""; 
      numPage += "<ul class='pagination'>"; 
      if (current > 1) numPage += "<li class='previous'><a href='" + URL + Controler + View + "?Page=" + (page - 1) + Params + "' aria-label='Previous'>&laquo;</a></li>"; 
      else numPage += "<li class='disabled'><a href='#' aria-label='Previous'><span aria-hidden='true'>&laquo;</span></a></li>"; 
      if (current > (offset + 1)) numPage += "<li><a href='" + URL + Controler + View + "?Page=1" + Params + "' name='page1'>1</a></li><li class='disabled spacing-dot'><a href='#'>...</a></li>"; 
      for (int i = 1; i <= totalPage; i++) 
      { 
       if (pageStart <= i && pageEnd >= i) 
       { 
        if (i == current) numPage += "<li class='active'><a href='#'>" + i + " <span class='sr-only'>(current)</span></a></li>"; 
        else numPage += "<li><a href='" + URL + Controler + View + "?Page=" + i + Params + "'>" + i + "</a></li>"; 
       } 
      } 
      if (totalPage > pageEnd) 
      { 
       record = offset; 
       numPage += "<li class='disabled spacing-dot'><a href='#'>...</a></li><li><a href='" + URL + Controler + View + "?Page=" + (totalPage) + Params + "'>" + totalPage + "</a></li>"; 
      } 
      if (current < totalPage) numPage += "<li class='next'><a class='ui-bar-d' href='" + URL + Controler + View + "?Page=" + (page + 1) + Params + "'>&raquo;</a></li>"; 
      else numPage += "<li class='disabled'><a href='#' aria-label='Previous'><span aria-hidden='true'>&raquo;</span></a></li>"; 
      numPage += "</ul>"; 
      return numPage; 
     } 
     else 
     { 
      return "no records found"; 
     } 
    } 
} 
} 

你可以在您的控制器中使用,如下所示:

Paging pg = new Paging(); 
private projectEntities db = new projectEntities(); 

//ex : Controller name-> news , view_name -> browse 
public ActionResult Index() 
    { 
     int offset = 1; 
     int Page = 1; 
     int Take = 20; 
     if (Convert.ToInt32(Request.QueryString["Page"]) > 1) 
     { 
      Page = Convert.ToInt32(Request.QueryString["Page"]); 
     } 

     int skip = 0; 
     if (Page == 1) 
      skip = 0; 
     else 
      skip = ((Page - 1) * Take); 
     int total = db.Table_Name.Count(); 
     var data = db.Table_Name.Skip(skip).Take(Take); 
     string paging = pg.Pagination(total, Page, Take, offset, "news", "/browse", ""); 
     ViewBag.Paging = paging; 
     return View(data.ToList()); 
    } 

之后,您可以调用它这样的观点:

@model IEnumerable<project.Models.project> 
@{ 
    ViewBag.Title = "News"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
<div class="container"> 

    <table class="table table-striped"> 
     <tr> 
      <th> 
       @Html.DisplayNameFor(model => model.field_name) 
      </th> 
     </tr> 

     @foreach (var item in Model) 
    { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.field_name) 
      </td> 
     </tr> 
    } 

</table> 
@Html.Raw(ViewBag.Paging)