ASP.NET MVC分页库(二)【使用示例】

【ASP.NET MVC4】第一课:初识ASP.NET MVC,创建第一个ASP.NET MVC项目 知识点:理解ASP.NET MVC 阅读详情

昨天,我的人生朝一个方向前进;而今天却朝着另一个方向。昨天,我相信我不可能做的事;今天,我却做了。


项目结构:

这里写图片描述


实体类:

    public class Product
    {
        public string Name { get; set; }
        public string Category { get; set; }
    }

 public class SearchModel
    {
        public SearchModel()
        {
            page = 1;
        }

        public int? page { get; set; }
    }

 public class ViewByCategoriesViewModel
    {
        public IPagedList<Product> Products { get; set; }
        public string[] AvailableCategories { get; set; }
        public string[] Categories { get; set; }
    }

   public class ViewSourceViewModel
    {
        public string RazorCode { get; set; }
        public string ControllerCode { get; set; }
    }

Controllers文件夹中控制器类

  [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult About()
        {
            return View();
        }
    }

  public class PagingController : Controller
    {
        private const int DefaultPageSize = 10;
        private readonly string[] allCategories = new string[3] {"Shoes", "Electronics", "Food"};
        private readonly IList<Product> allProducts = new List<Product>();

        public PagingController()
        {
            InitializeProducts();
        }

        private void InitializeProducts()
        {
            // 创建产品列表。 其中50%属于鞋类,电子类占25%,食品类占25%。
            for (int i = 0; i < 527; i++)
            {
                var product = new Product();
                product.Name = "Product " + (i + 1);
                int categoryIndex = i%4;
                if (categoryIndex > 2)
                {
                    categoryIndex = categoryIndex - 3;
                }
                product.Category = allCategories[categoryIndex];
                allProducts.Add(product);
            }
        }

        public ActionResult Index(int? page)
        {
            int currentPageIndex = page.HasValue ? page.Value - 1 : 0;
            return View(allProducts.ToPagedList(currentPageIndex, DefaultPageSize));
        }

        public ActionResult CustomPageRouteValueKey(SearchModel search)
        {
            int currentPageIndex = search.page.HasValue ? search.page.Value - 1 : 0;
            return View(allProducts.ToPagedList(currentPageIndex, DefaultPageSize));
        }

        public ActionResult ViewByCategory(string categoryName, int? page)
        {
            categoryName = categoryName ?? allCategories[0];
            int currentPageIndex = page.HasValue ? page.Value - 1 : 0;

            IPagedList<Product> productsByCategory =
                allProducts.Where(p => p.Category.Equals(categoryName)).ToPagedList(currentPageIndex,
                    DefaultPageSize);
            ViewBag.CategoryName = new SelectList(allCategories, categoryName);
            ViewBag.CategoryDisplayName = categoryName;
            return View("ProductsByCategory", productsByCategory);
        }

        public ActionResult ViewByCategories(string[] categories, int? page)
        {
            var model = new ViewByCategoriesViewModel();
            model.Categories = categories ?? new string[0];
            int currentPageIndex = page.HasValue ? page.Value - 1 : 0;

            model.Products = allProducts.Where(p => model.Categories.Contains(p.Category))
                .ToPagedList(currentPageIndex, DefaultPageSize);
            model.AvailableCategories = allCategories;
            return View("ProductsByCategories", model);
        }

        public ActionResult IndexAjax()
        {
            int currentPageIndex = 0;
            IPagedList<Product> products = allProducts.ToPagedList(currentPageIndex, DefaultPageSize);
            return View(products);
        }

        public ActionResult AjaxPage(int? page)
        {
            ViewBag.Title = "Browse all products";
            int currentPageIndex = page.HasValue ? page.Value - 1 : 0;
            IPagedList<Product> products = allProducts.ToPagedList(currentPageIndex, DefaultPageSize);
            return PartialView("_ProductGrid", products);
        }

        public ActionResult Bootstrap(int? page)
        {
            int currentPageIndex = page.HasValue ? page.Value - 1 : 0;
            return View(allProducts.ToPagedList(currentPageIndex, DefaultPageSize));
        }

        public ActionResult Bootstrap3(int? page)
        {
            int currentPageIndex = page.HasValue ? page.Value - 1 : 0;
            return View(allProducts.ToPagedList(currentPageIndex, DefaultPageSize));
        }
    }

Home文件夹里视图:

Index.cshtml

@{
    ViewBag.Title = "ASP.NET MVC分页示例 - 首页";
}

@section featured {
    <section class="featured">
        <div class="content-wrapper">
            <hgroup class="title">
                <h2>@ViewBag.Title</h2>
            </hgroup>
            <p>

            </p>
        </div>
    </section>
}
<dl>
    <dt>@Html.ActionLink("简单的分页", "Index", "Paging")</dt>
    <dd>产品列表的分页示例</dd>
</dl>
<dl>
    <dt>@Html.ActionLink("分页过滤 #1", "ViewByCategory", "Paging")</dt>
    <dd>按类别过滤的产品列表</dd>
</dl>
<dl>
    <dt>@Html.ActionLink("分页过滤 #2", "ViewByCategories", "Paging")</dt>
    <dd>
        由多个类别过滤的产品列表<br />
        此演示还使用强类型的viewmodel,它结合了结果和类别.
    </dd>
</dl>
<dl>
    <dt>@Html.ActionLink("一个区域的简单分页", "Index", "Paging", new {Area = "Area51"}, null)</dt>
    <dd>分页还支持区域</dd>
</dl>
<dl>
    <dt>@Html.ActionLink("使用AJAX进行分页", "IndexAjax", "Paging")</dt>
    <dd>分页通过jquery支持unobtrusive AJAX。</dd>
</dl>
<dl>
    <dt>@Html.ActionLink("可选择的分页显示模板", "Bootstrap", "Paging")</dt>
    <dd>分页结合Twitter Bootstrap</dd>
</dl>
<dl>
    <dt>@Html.ActionLink("另一个可选的分页显示模板", "Bootstrap3", "Paging")</dt>
    <dd>
        分页与Bootstrap 3组合。此示例还仅显示页码,而不包含上一个和下一个链接。
    </dd>
</dl>

<dl>
    <dt>@Html.ActionLink("使用自定义页面路由值键的分页", "CustomPageRouteValueKey", "Paging")</dt>
    <dd>分页支持在生成分页链接时指定用于“page”的路由值键</dd>
</dl>

Paging文件夹里视图:

Bootstrap.cshtml

@using MvcPaging.Demo.Models
@model IPagedList<MvcPaging.Demo.Models.Product>
@{
    Layout = null;
    ViewBag.Title = "Twitter Bootstrap布局的分页";
}
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>@ViewBag.Title</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <!-- Le styles -->
        <link href="@Url.Content("~/Content/Css/bootstrap.min.css")" rel="stylesheet">
        <style>
            body {
                padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
            }
        </style>
        <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
        <!--[if lt IE 9]>
            <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->

        <link href="@Url.Content("~/Content/SyntaxHighlighter/shCore.css")" rel="stylesheet" type="text/css" />
        <link href="@Url.Content("~/Content/SyntaxHighlighter/shThemeDefault.css")" rel="stylesheet" type="text/css" />
        <script type="text/javascript" src="@Url.Content("~/Scripts/SyntaxHighlighter/shCore.js")"></script>
        <script type="text/javascript" src="@Url.Content("~/Scripts/SyntaxHighlighter/shBrushCSharp.js")"></script>
        <script type="text/javascript" src="@Url.Content("~/Scripts/SyntaxHighlighter/shBrushXml.js")"></script>

    </head>
    <body>
        <div class="navbar navbar-fixed-top">
            <div class="navbar-inner">
                <div class="container">
                    <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
                        <span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span>
                    </a><a class="brand" href="#">ASP.NET MVC Paging sample</a>
                    <div class="nav-collapse">
                        <ul class="nav">
                            <li>@Html.ActionLink("首页", "Index", "Home", new {area = String.Empty}, null)</li>
                            <li>@Html.ActionLink("About", "About", "Home", new {area = String.Empty}, null)</li>
                        </ul>
                    </div>
                    <!--/.nav-collapse -->
                </div>
            </div>
        </div>
        <div class="container">
            <h1>@ViewBag.Title</h1>

            <table class="table table-striped">
                <thead>
                    <tr>
                        <th>Product name</th>
                        <th>Category</th>
                    </tr>
                </thead>
                <tbody>
                    @foreach (Product product in Model)
                    {
                        <tr>
                            <td>@product.Name</td>
                            <td>@product.Category</td>
                        </tr>
                    }
                </tbody>
            </table>
            @Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount).Options(o => o
                .DisplayTemplate("BootstrapPagination")
                .MaxNrOfPages(14)
                .AlwaysAddFirstPageNumber()
                .SetPreviousPageText("←")
                .SetNextPageText("→")
                )

            @{
                var sourceModel = new ViewSourceViewModel();
                sourceModel.RazorCode = @"
<!-- Bootstrap.cshtml view -->

@using MvcPaging.Demo.Models
@model IPagedList<Product>
@{
    Layout = null;
    ViewBag.Title = ""Pager with Twitter Bootstrap layout"";
}
<!DOCTYPE html>
<html lang=""en"">
<head>
    <meta charset=""utf-8"">
    <title>@ViewBag.Title</title>
    <meta name=""viewport"" content=""width=device-width, initial-scale=1.0"">
    <!-- Le styles -->
    <link href=""@Url.Content(""~/Content/Css/bootstrap.min.css"")"" rel=""stylesheet"">
    <style>
        body
        {
            padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
        }
    </style>
    <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
    <!--[if lt IE 9]>
      <script src=""http://html5shim.googlecode.com/svn/trunk/html5.js""></script>
    <![endif]-->

</head>
<body>
    <div class=""navbar navbar-fixed-top"">
        <div class=""navbar-inner"">
            <div class=""container"">
                <a class=""btn btn-navbar"" data-toggle=""collapse"" data-target="".nav-collapse""><span
                    class=""icon-bar""></span><span class=""icon-bar""></span><span class=""icon-bar""></span>
                </a><a class=""brand"" href=""#"">ASP.NET MVC Paging sample</a>
                <div class=""nav-collapse"">
                    <ul class=""nav"">
                        <li>@Html.ActionLink(""首页"", ""Index"", ""Home"", new { area = String.Empty }, null)</li>
                        <li>@Html.ActionLink(""About"", ""About"", ""Home"", new { area = String.Empty }, null)</li>
                    </ul>
                </div>
                <!--/.nav-collapse -->
            </div>
        </div>
    </div>
    <div class=""container"">
        <h1>@ViewBag.Title</h1>

        <table class=""table table-striped"">
            <thead>
                <tr>
                    <th>Product name</th>
                    <th>Category</th>
                </tr>
            </thead>
            <tbody>
                @foreach (var product in Model)
                {
                    <tr>
                        <td>@product.Name</td>
                        <td>@product.Category</td>
                    </tr>
                }
            </tbody>
        </table>
        @Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount).Options(o => o
            .DisplayTemplate(""BootstrapPagination"")
            .MaxNrOfPages(14)
            .AlwaysAddFirstPageNumber()
            .SetPreviousPageText(""←"")
            .SetNextPageText(""→"")
        )
    </div>
</body>

<!-- BootstrapPagination.cshtml DisplayTemplate -->

@model PaginationModel
<div class=""pagination"">
    <ul>
        @foreach (var link in Model.PaginationLinks)
        {
            @BuildLink(link)
        }
    </ul>
</div>

@helper BuildLink(PaginationLink link)
{
    var liBuilder = new TagBuilder(""li"");
    if (link.IsCurrent)
    {
        liBuilder.MergeAttribute(""class"", ""active"");
    }
    if (! link.Active)
    {
        liBuilder.MergeAttribute(""class"", ""disabled"");
    }

    var aBuilder = new TagBuilder(""a"");
    if (link.Url == null)
    {
        aBuilder.MergeAttribute(""href"", ""#"");
    }
    else
    {
        aBuilder.MergeAttribute(""href"", link.Url);
    }

    // Ajax support
    if (Model.AjaxOptions != null)
        {
            foreach (var ajaxOption in Model.AjaxOptions.ToUnobtrusiveHtmlAttributes())
            {
                aBuilder.MergeAttribute(ajaxOption.Key, ajaxOption.Value.ToString(), true);
            }
        }

    aBuilder.SetInnerText(link.DisplayText);

    liBuilder.InnerHtml = aBuilder.ToString();

    @Html.Raw(liBuilder.ToString())
}
";

                sourceModel.ControllerCode = @"
public ActionResult Bootstrap(int? page)
{
    int currentPageIndex = page.HasValue ? page.Value - 1 : 0;
    return View(this.allProducts.ToPagedList(currentPageIndex, DefaultPageSize));
}";
            }

            @Html.Partial("ViewSource", sourceModel)


        </div>
        <!-- /container -->

    </body>
</html>

Bootstrap3.cshtml

@using MvcPaging.Demo.Models
@model IPagedList<MvcPaging.Demo.Models.Product>
@{
    Layout = null;
    ViewBag.Title = "Twitter Bootstrap 3布局的分页";
}
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>@ViewBag.Title</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <!-- Le styles -->
        <link href="@Url.Content("~/Content/Css/bootstrap3.min.css")" rel="stylesheet">
        <style>
            body {
                padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
            }
        </style>

        <link href="@Url.Content("~/Content/SyntaxHighlighter/shCore.css")" rel="stylesheet" type="text/css" />
        <link href="@Url.Content("~/Content/SyntaxHighlighter/shThemeDefault.css")" rel="stylesheet" type="text/css" />
        <script type="text/javascript" src="@Url.Content("~/Scripts/SyntaxHighlighter/shCore.js")"></script>
        <script type="text/javascript" src="@Url.Content("~/Scripts/SyntaxHighlighter/shBrushCSharp.js")"></script>
        <script type="text/javascript" src="@Url.Content("~/Scripts/SyntaxHighlighter/shBrushXml.js")"></script>

    </head>
    <body>
        <a class="sr-only" href="#content">Skip navigation</a>

        <!-- Docs master nav -->
        <header class="navbar navbar-inverse navbar-fixed-top bs-docs-nav" role="banner">
            <div class="container">
                <div class="navbar-header">
                    <button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse">
                        <span class="sr-only">Toggle navigation</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                </div>
                <nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation">
                    <ul class="nav navbar-nav">
                        <li>@Html.ActionLink("首页", "Index", "Home", new {area = String.Empty}, null)</li>
                        <li>@Html.ActionLink("About", "About", "Home", new {area = String.Empty}, null)</li>
                    </ul>
                </nav>
            </div>
        </header>
        <div class="container">
            <h1>@ViewBag.Title</h1>

            <table class="table table-striped">
                <thead>
                    <tr>
                        <th>Product name</th>
                        <th>Category</th>
                    </tr>
                </thead>
                <tbody>
                    @foreach (Product product in Model)
                    {
                        <tr>
                            <td>@product.Name</td>
                            <td>@product.Category</td>
                        </tr>
                    }
                </tbody>
            </table>
            @Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount).Options(o => o
                .DisplayTemplate("Bootstrap3Pagination")
                .MaxNrOfPages(14)
                .AlwaysAddFirstPageNumber()
                .HidePreviousAndNextPage()
                )

            @{
                var sourceModel = new ViewSourceViewModel();
                sourceModel.RazorCode = @"
<!-- Bootstrap3.cshtml view -->

@using MvcPaging.Demo.Models
@model IPagedList<Product>
@{
    Layout = null;
    ViewBag.Title = ""Pager with Bootstrap 3 layout"";
}
<!DOCTYPE html>
<html lang=""en"">
    <head>
        <meta charset=""utf-8"">
        <title>@ViewBag.Title</title>
        <meta name=""viewport"" content=""width=device-width, initial-scale=1.0"">
        <!-- Le styles -->
        <link href=""@Url.Content(""~/Content/Css/bootstrap3.min.css"")"" rel=""stylesheet"">
        <style>
            body {
                padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
            }
        </style>
    </head>
<body>
    <a class=""sr-only"" href=""#content"">Skip navigation</a>

    <!-- Docs master nav -->
    <header class=""navbar navbar-inverse navbar-fixed-top bs-docs-nav"" role=""banner"">
        <div class=""container"">
            <div class=""navbar-header"">
                <button class=""navbar-toggle"" type=""button"" data-toggle=""collapse"" data-target="".bs-navbar-collapse"">
                    <span class=""sr-only"">Toggle navigation</span>
                    <span class=""icon-bar""></span>
                    <span class=""icon-bar""></span>
                    <span class=""icon-bar""></span>
                </button>
            </div>
            <nav class=""collapse navbar-collapse bs-navbar-collapse"" role=""navigation"">
                <ul class=""nav navbar-nav"">
                    <li>@Html.ActionLink(""首页"", ""Index"", ""Home"", new { area = String.Empty }, null)</li>
                    <li>@Html.ActionLink(""About"", ""About"", ""Home"", new { area = String.Empty }, null)</li>s
                </ul>
            </nav>
        </div>
    </header>
    <div class=""container"">
        <h1>@ViewBag.Title</h1>

        <table class=""table table-striped"">
            <thead>
                <tr>
                    <th>Product name</th>
                    <th>Category</th>
                </tr>
            </thead>
            <tbody>
                @foreach (var product in Model)
                {
                    <tr>
                        <td>@product.Name</td>
                        <td>@product.Category</td>
                    </tr>
                }
            </tbody>
        </table>
        @Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount).Options(o => o
            .DisplayTemplate(""Bootstrap3Pagination"")
            .MaxNrOfPages(14)
            .AlwaysAddFirstPageNumber()
            .HidePreviousAndNextPage()
        )
    </div>
</body>

<!-- Bootstrap3Pagination.cshtml DisplayTemplate -->

@model PaginationModel
<ul class=""pagination"">
    @foreach (var link in Model.PaginationLinks)
    {
        @BuildLink(link)
    }
</ul>

@helper BuildLink(PaginationLink link)
{
    var liBuilder = new TagBuilder(""li"");
    if (link.IsCurrent)
    {
        liBuilder.MergeAttribute(""class"", ""active"");
    }
    if (! link.Active)
    {
        liBuilder.MergeAttribute(""class"", ""disabled"");
    }

    var aBuilder = new TagBuilder(""a"");
    if (link.Url == null)
    {
        aBuilder.MergeAttribute(""href"", ""#"");
    }
    else
    {
        aBuilder.MergeAttribute(""href"", link.Url);
    }

    // Ajax support
    if (Model.AjaxOptions != null)
    {
        foreach (var ajaxOption in Model.AjaxOptions.ToUnobtrusiveHtmlAttributes())
        {
            aBuilder.MergeAttribute(ajaxOption.Key, ajaxOption.Value.ToString(), true);
        }
    }

    if (link.DisplayText == ""«"")
    {
        aBuilder.InnerHtml = ""&laquo;"";
    }
    else if (link.DisplayText == ""»"")
    {
        aBuilder.InnerHtml = ""&raquo;"";
    }
    else
    {
        aBuilder.SetInnerText(link.DisplayText);
    }
    liBuilder.InnerHtml = aBuilder.ToString();

    @Html.Raw(liBuilder.ToString())
}";

                sourceModel.ControllerCode = @"
public ActionResult Bootstrap(int? page)
{
    int currentPageIndex = page.HasValue ? page.Value - 1 : 0;
    return View(this.allProducts.ToPagedList(currentPageIndex, DefaultPageSize));
}";
            }

            @Html.Partial("ViewSource", sourceModel)


        </div>
        <!-- /container -->
    </body>
</html>

CustomPageRouteValueKey.cshtml

@using MvcPaging.Demo.Models
@model IPagedList<MvcPaging.Demo.Models.Product>
@{
    ViewBag.Title = "浏览所有产品(自定义页面路由值键)";
}
<h2>@ViewBag.Title</h2>
<table class="grid">
    <thead>
        <tr>
            <th>Product name</th>
            <th>Category</th>
        </tr>
    </thead>
    <tbody>
        @foreach (Product product in Model)
        {
            <tr>
                <td>@product.Name</td>
                <td>@product.Category</td>
            </tr>
        }
    </tbody>
</table>
<div class="pager">
    @Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount).Options(o => o
        .PageRouteValueKey("Search.page")
        .AlwaysAddFirstPageNumber())
</div>
@{
    var sourceModel = new ViewSourceViewModel();
    sourceModel.RazorCode = @"
@using MvcPaging.Demo.Models
@model IPagedList<Product>
@{
    ViewBag.Title = ""Browse all products (custom page route value key)"";
}
<h2>@ViewBag.Title</h2>
<table class=""grid"">
    <thead>
        <tr>
            <th>Product name</th>
            <th>Category</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var product in Model)
        {
            <tr>
                <td>@product.Name</td>
                <td>@product.Category</td>
            </tr>
        }
    </tbody>
</table>
<div class=""pager"">
    @Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount).Options(o => o
            .PageRouteValueKey(""Search.page"")
            .AlwaysAddFirstPageNumber())
</div>
";

    sourceModel.ControllerCode = @"
public ActionResult CustomPageRouteValueKey(SearchModel search)
{
    int currentPageIndex = search.page.HasValue ? search.page.Value - 1 : 0;
    return View(this.allProducts.ToPagedList(currentPageIndex, DefaultPageSize));
}
";
}

@Html.Partial("ViewSource", sourceModel)

Index.cshtml

@using MvcPaging.Demo.Models
@model IPagedList<MvcPaging.Demo.Models.Product>
@{
    ViewBag.Title = "浏览所有产品";
}
<h2>@ViewBag.Title</h2>
<table class="grid">
    <thead>
        <tr>
            <th>Product name</th>
            <th>Category</th>
        </tr>
    </thead>
    <tbody>
        @foreach (Product product in Model)
        {
            <tr>
                <td>@product.Name</td>
                <td>@product.Category</td>
            </tr>
        }
    </tbody>
</table>
<div class="pager">
    @Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount)
</div>

IndexAjax.cshtml

@using MvcPaging.Demo.Models
@model IPagedList<MvcPaging.Demo.Models.Product>
@{
    ViewBag.Title = "浏览所有产品(ajax)";
}
<h2>@ViewBag.Title</h2>
<div id="gridcontainer">
    @Html.Partial("_ProductGrid", Model)
</div>

ProductsByCategories.cshtml

@using MvcPaging.Demo.Models
@model MvcPaging.Demo.Models.ViewByCategoriesViewModel
@{
    ViewBag.Title = "按多选类别浏览产品";
}
<h2>@ViewBag.Title</h2>
@using (Html.BeginForm("ViewByCategories", "Paging", FormMethod.Get))
{
    <p>
        Select category or categories:
        <ul>
            @foreach (string category in Model.AvailableCategories)
            {
                <li>
                    <label>
                        <input type="checkbox" name="categories" value="@category" @if (Model.Categories.Any(c => c == category))
                                                                                   {
                                                                                       <text> checked="checked" </text>
                                                                                   } />
                        @category
                    </label>
                </li>
            }
        </ul>
        <input type="submit" value="Browse" />
    </p>
}
@if (Model.Products.Any())
{
    <table class="grid">
        <thead>
            <tr>
                <th>Product name</th>
                <th>Category</th>
            </tr>
        </thead>
        <tbody>
            @foreach (Product product in Model.Products)
            {
                <tr>
                    <td>@product.Name</td>
                    <td>@product.Category</td>
                </tr>
            }
        </tbody>
    </table>
    <div class="pager">
        @Html.Pager(Model.Products.PageSize, Model.Products.PageNumber, Model.Products.TotalItemCount).Options(o => o
            .AddRouteValueFor(m => m.Categories)
            .DisplayFirstAndLastPage()
            .SetFirstPageText("First")
            .SetLastPageText("Last")
            .SetPreviousPageText("Prev")
            .SetNextPageText("Next"))
        Displaying @Model.Products.ItemStart - @Model.Products.ItemEnd of @Model.Products.TotalItemCount item(s)
    </div>
}

ProductsByCategory.cshtml

@using MvcPaging.Demo.Models
@model IPagedList<MvcPaging.Demo.Models.Product>
@{
    ViewBag.Title = "按类别浏览产品";
}
<h2>@ViewBag.Title</h2>
@using (Html.BeginForm("ViewByCategory", "Paging", FormMethod.Get))
{
    <p>
        Select a category:
        @Html.DropDownList("categoryName")
        <input type="submit" value="Browse" />
    </p>
}
@if (Model.Count() > 0)
{
    <table class="grid">
        <thead>
            <tr>
                <th>Product name</th>
                <th>Category</th>
            </tr>
        </thead>
        <tbody>
            @foreach (Product product in Model)
            {
                <tr>
                    <td>@product.Name</td>
                    <td>@product.Category</td>
                </tr>
            }
        </tbody>
    </table>
    <div class="pager">
        @Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount).Options(o => o.AddRouteValue("categoryname", ViewBag.CategoryDisplayName))
        Displaying @Model.ItemStart - @Model.ItemEnd of @Model.TotalItemCount item(s)
    </div>
}

视图文件结构:

这里写图片描述

运行结果如图:

这里写图片描述


这里写图片描述


这里写图片描述


这里写图片描述

基于后台的bootstrap分页控件pagination在asp.net mvc的使用 bootstrap分页控件pagination在asp.net mvc的使用,采用了bt的日历控件、分页控件、AJAX获取后台分页数据 立即下载

相关推荐

MvcPager分页示例MVC2.0源码

MvcPager分页示例MVC2.0源码 MvcPager分页示例MVC2.0 开发环境:VS2008SP1+MVC2.0+MSSQL2005 ASP.NET MvcPager 1.3版发布(2010-3-30) MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码,尤其是ScottGu的PagedList类和相关方法,经过站长不断完善和改进后推出的比较成熟而且功能强大的ASP.NET MVC分页解决方案 MvcPager主要功能有: 1、实现最基本的url route分页; 2、支持手工输入或选择页索引并对输入的页索引进行有效性验证; 3、支持使用ASP.NET MVC Ajax默认的MicrosoftAjax和MicrosoftMvcAjax客户端脚本库实现Ajax分页; 4、支持使用jQuery实现Ajax分页,生成的Html代码更精简; 5、支持Ajax分页模式下,若客户端浏览器不支持或禁用Javascript功能时安全降级为普通分页 6、搜索引擎友好,无论是普通分页还是Ajax分页,搜索引擎都可以直接搜索到所有页面。 7、支持ASP.NET MVC 1.0和最新的ASP.NET MVC 2.0 版本; 8、支持IE、Firefox、Opera、Chrome及Safari等常用浏览器;

如何在ASP.NET Core中建立有效的分页

目录 介绍 背景 创建项目 在后端处理分页 创建分页UI控件 添加搜索过滤器 自定义分页UI控件 改善性能 改善搜寻逻辑 下载样本-1.6 MB 介绍 本文将解释如何使用分页来仅检索所需数量的记录,并显示参考总记录的分页控件。 背景 最有可能遇到了这个问题,您需要从包含数千个或更多记录的数据源中列出几行记录,但随后注意到分页是提高站点性能的重要因素。从过滤数据到从数据库中...

寒冰屋的专栏 5773

asp.net MVC5 + Bootstrap 增删改查分页(最新)

asp.net MVC5 + Bootstrap 增删改查分页(重点是里面的table及分页用法)。另外说一下项目用到了bootstrap-table,bootstrap-dialog,bootstrap-daterangepicker组件,很不错的几个组件

asp.net core mvc 分页

第一步:项目中引入  第二步:建立控制器和方法   public IActionResult PageTest(int pageindex = 1, int pagesize = 10, string Name = "")         {             List&lt;TsetModel&gt; list = new List&lt;TsetModel&gt;();       ...

刘联其的个人分享 6590

InSAR图像配准:从像素级到亚像素级的精度提升策略

本文深入探讨了InSAR图像配准技术,从像素级到亚像素级的精度提升策略。通过分析最大频谱法和相干系数法的适用场景,结合频域补零插值和四叉树分块等高级技术,实现1/8像素级的高精度配准。文章还提供了实用的精度验证方法和常见问题排查指南,为InSAR数据处理提供全面解决方案。

nginx7reverse的博客 834

力软敏捷开发框架源码7.0.6旗舰版 JNPF开发平台3.4.5 企业版 旗舰版

JNPF作为作为一款深受用户喜爱的低代码产品,凭借雄厚的科研技术力量、丰富的软件开发项目经验、严谨的项目开发流程和高质量的售后服务,已成功帮助千家企业完成数字化项目,建立了覆盖不同行业客户和不同发展阶段的软件产品服务体系。

huoooos0的博客 1838

ASP.NET MVC分页的实现

在ASP.NET中,GridView控件本身就带有分页的功能,只要把当前页面的索引值赋给GridView的PageIndex就可以实现了分页,至于数据怎么分页,全都由GridView封装起来了。 在ASP.NET MVC中分页的实现就只能靠自己来设计了。首先来说一下分页的原理。现在有一个张news表,中间有很多信息,我们假设一页显示5条记录,这样,页面数量=总记录数/5;这里,如果出现小数,得进...

weixin_30819085的博客 601

使用IGV软件可视化染色质可及性

染色质可及性(chromatin accessibility)是指DNA序列在植物细胞核中的可访问程度。染色质是由DNA和蛋白质组成的复杂结构,它紧密地包裹在细胞核中,并影响基因的表达和功能。染色质可及性研究着重于理解染色质是否容易被转录因子和其他调控蛋白访问,从而影响基因的表达。文献中,常常会有下面这种图片来表示基因组上的一些区域或基因的染色质开放性强弱。一般情况下,我们可以使用IGV软件或GSA-man软件进行可视化,两者的操作相似。这里,以IGV软件为例,演示如何对染色质可及性进行可视化。

沉香best的博客 3721

通过示例介绍ASP.NET Core MVC(第2部分)

在本文中,您将学习如何添加分页、如何使用标签助手、什么是局部视图以及如何使用它等等。

寒冰屋的专栏 472

CUDA-GDB(11)——调试示例演练

本博客包含三个CUDA-GDB的演练示例: ​​​​▶ Example: bitreverse ▶ Example: autostep ▶ Example: MPI CUDA Application

AI-安全-功耗 1512

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第10套模块A:网络构建 & (五)网络运维配置+(六)SDN网络配置-命令配置

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第10套模块A:网络构建 & (五)网络运维配置+(六)SDN网络配置-命令配置

君逍遥o 808

使用自定义HtmlHelpers在.NET Core MVC应用程序中实现分页

在本文中,我们通过简单地创建自定义HtmlHelper在.NET Core MVC应用程序中实现分页。为了简单起见,我们只使用数字来表示数据。

寒冰屋的专栏 829

XCP实战系列介绍09-基于Vehicle Spy进行XCP测量步骤详解

详细介绍如何使用Vehicle Spy进行XCP测量

initiallizer的博客 1390

ASP.NET——MVC编程

如何使用 C# 中的 MVC 模式去开发一个简单的 Web 应用程序,将业务逻辑、用户界面和请求处理清晰地分离,提高开发效率和代码的可维护性。根据需要,可以进一步扩展和优化该示例,添加更多的功能和页面。

2401_84642440的博客 2348

1、符号回归:原理、应用与实践

本文全面介绍了符号回归(Symbolic Regression)的原理、发展历程、核心算法及其在科学与工程领域的广泛应用。文章从基本概念出发,详细阐述了基于遗传编程的符号回归机制,并探讨了其在游艇水动力学、化学过程、锂离子电池、生物医学等多个领域的实际应用。同时,博文还涵盖了高级技术如知识集成、系数优化、预测区间计算及微分方程发现等内容,对比了开源与商业软件工具,并展望了未来发展趋势,旨在为研究人员和从业者提供一本实用的符号回归指南。

ipfs8storage的博客 248

药物不良反应预测实战指南:从FAERS数据挖掘到PyTorch深度学习模型(含可解释性分析)

【代码】药物不良反应预测实战指南:从FAERS数据挖掘到PyTorch深度学习模型(含可解释性分析)

理论都是虚的,代码才是王道。 721

C#、ASP.NET、ASP.NET MVC、ASP.NET web form、asp.net core mvc的区别。哦我的上帝啊!这可真糟糕

微软的命名很糟糕。技术上有两个框架:ASP.NET和ASP.NET Core,它们分别基于.NET Framework和.NET Core构建。 当Microsoft首次尝试创建一个遵循MVC模式的“现代”Web应用程序平台时,它将这个新平台称为“ASP.NET MVC”,以区别于以前的ASP.NET应用程序(主要是Web Forms)。然后,为了更加混淆事情,他们后来添加了“ASP.NET We...

菜鸟变凤凰 2449

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

一文讲懂C#、ASP.NET、ASP.NET MVC、ASP.NET web form、asp.net core mvc的区别

一文讲懂C#、ASP.NET、ASP.NET MVC、ASP.NET web form、asp.net core mvc的区别

Blue 4511

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

asp.net mvc 学习总结

自学MVC看这里——全网最全ASP.NET MVC 教程汇总 http://www.cnblogs.com/powertoolsteam/archive/2015/08/13/4667892.html MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC。小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口。本文从Why,What,How三个角度整理MVC 的学习资源,让学习者第一时间找到最有价值的文章,获取最彻底的ASp

Tusk_Act4的博客 2599

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ASP.NET MVC 安装使用教程

ASP.NET MVC开发入门指南:从安装到部署 摘要:本文系统介绍了ASP.NET MVC开发框架的基础知识和实践操作。主要内容包括:ASP.NET MVC框架概述、Razor视图引擎的使用、开发环境搭建(.NET SDK和Visual Studio安装)、项目创建与结构解析、控制器与视图的编写、模型绑定与表单处理等核心功能。同时提供了项目部署方法和常见问题解答,推荐了官方文档等学习资源。文章涵盖从零开始创建ASP.NET MVC应用到部署上线的完整流程,适合开发者快速入门ASP.NET MVC开发。

真正的大师永远怀着一颗学徒的心 1450

ASP.NET MVC AJAX的调用示例

@{ ViewBag.Title = "Home Page"; //下面引用Jquery和unobtrusive-ajax } @Scripts.Render("~/bundles/jquery") @{ //设置ajaxOptions var ajaxOptions = new AjaxOptions() { OnSuccess = "S

深南大道 5217

自学MVC看这里——全网最全ASP.NET MVC 教程汇总

MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC。小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口。本文从Why,What,How三个角度整理MVC 的学习资源,让学习者第一时间找到最有价值的文章,获取最彻底的ASp.NET MVC 框架知识,Let’s go!   1. Why :为什么

kong1940742529的博客 5974

ASP.NET MVC

ViewStart.cshtml是一个全局的布局文件,程序中每个.cshtml页面都会默认使用_ViewStart提供的布局。同时.NET Framework 提供了多种技术框架,ASP.NET MVC是.NET Framework提供的众多技术框架中的一种,用于开发Web应用。ASP.NET MVC框架使用了约定大于配置的思想,按照框架约定的结构组织文件,浏览器请求某个Controller方法时,该方法默认返回与方法同名的.cshtml文件,浏览器接收.cshtml并渲染页面。.cshtml文件同名。

weixin_47249500的博客 1133

IIS中使用ASP.NET MVC的经验总结

在这篇文章中我们学习在不同版本的IIS中使用ASP.NET MVC和URL Routing。我们学习针对IIS7.0、IIS6.0和更早版本的IIS的处理策略。 ASP.NET MVC框架依赖于URL Routing,要充分利用URL Routing,我们需要对Web服务器(IIS)进行一些额外的配置。 IIS的最新版本是Windows2008中的IIS7.0,我们也可以Vista系统

niemeiquan的专栏 6614

ASP.NET MVC入门介绍和使用

我正在学习ASP.NET MVC中,使用Visual Studio 2015这个软件,所以给大家分享一下我使用它的思路。 ASP.NET是一个使用HTML,CSS,JAVAScript 和服务器脚本创建网页和网站的开发框架,它支持三种模式:Web Pages(页面),MVC,Web Forms(窗体)。 MVC是Model View Controller(模型-视图-控制器)的简称,是ASP.NE...

weixin_44541213的博客 3445

详解ASP.NET MVC使用Chart控件调用示例

在 .NET 3.5 的时候,微软就提供了一个 Chart 控件,网络上有大量的关于在 VS2008 中使用这个控件的文章,在 VS2010 中,这个控件已经被集成到 ASP.NET 4.0 中,可以从工具箱中直接使用了。本文章将从ASP.NET MVC使用Chart控件调用示例,敬请大家留意。

体会技术牛人的高傲 2276
上一篇: ASP.NET MVC分页库(一)【基础类库】
下一篇: ASP.NET程序员常用的85个工具
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值