Alphabetical Paging in ASP.NET MVC (C#)
Here's the C# version of Alphabetic Paging in VB.NET Posts:
1. Alphabetical Paging in ASP.NET MVC
2. Alphabetical-Paging-in-ASP-NET-MVC Source Code
Solution Structure
HtmlHelpers.cs
HomeController.cs
ProductModel.cs
AlphabeticalPagingViewModel.cs
Index.cshtml
Cheers! :)
1. Alphabetical Paging in ASP.NET MVC
2. Alphabetical-Paging-in-ASP-NET-MVC Source Code
Solution Structure
HtmlHelpers.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Text; using System.Web.Mvc; namespace MVCAlphabeticPager.Helpers { public static class HtmlHelpers { public static HtmlString AlphabeticalPager(this HtmlHelper html, string selectedLetter, IEnumerable<string> firstLetters, Func<string, string> pageLink) { var sb = new StringBuilder(); var numbers = Enumerable.Range(0, 10).Select(i => i.ToString()); var alphabet = Enumerable.Range(65, 26).Select(i => ((char)i).ToString()).ToList(); alphabet.Insert(0, "All"); alphabet.Insert(1, "0-9"); var ul = new TagBuilder("ul"); ul.AddCssClass("pagination"); ul.AddCssClass("alpha"); foreach (var letter in alphabet) { var li = new TagBuilder("li"); if (firstLetters.Contains(letter) || (firstLetters.Intersect(numbers).Any() && letter == "0-9") || letter == "All") { if (selectedLetter == letter || string.IsNullOrEmpty(selectedLetter) && letter == "All") { li.AddCssClass("active"); var span = new TagBuilder("span"); span.SetInnerText(letter); li.InnerHtml = span.ToString(); } else { var a = new TagBuilder("a"); a.MergeAttribute("href", pageLink(letter)); a.InnerHtml = letter; li.InnerHtml = a.ToString(); } } else { li.AddCssClass("inactive"); var span = new TagBuilder("span"); span.SetInnerText(letter); li.InnerHtml = span.ToString(); } sb.Append(li.ToString()); } ul.InnerHtml = sb.ToString(); return new HtmlString(ul.ToString()); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MVCAlphabeticPager.Models; namespace MVCAlphabeticPager.Controllers { public class HomeController : Controller { public ActionResult Index(string selectedLetter) { var model = new AlphabeticalPagingViewModel(); model.SelectedLetter = selectedLetter ; using (var context = new AdventureWorks2012Entities()) { model.FirstLetters = context.Products .GroupBy(p => p.Name.Substring(0, 1)) .Select(x => x.Key.ToUpper()) .ToList(); //initialize model model.Products = new List<ProductModel>(); if (string.IsNullOrEmpty(selectedLetter) || selectedLetter == "All") { model.Products .AddRange( (from item in context.Products join category in context.ProductSubcategories on item.ProductSubcategoryID equals category.ProductSubcategoryID into ProductCategory from category in ProductCategory.DefaultIfEmpty() select new ProductModel() { ProductName = item.Name, ProductID = item.ProductID, ProductNumber = item.ProductNumber, Color = (string.IsNullOrEmpty(item.Color)) ? "NA" : item.Color, StandardCost = item.StandardCost, ProductCategory = (string.IsNullOrEmpty(category.Name)) ? "NA" : category.Name }).ToList()); } else { if (selectedLetter == "0-9") { var numbers = Enumerable.Range(0, 10).Select(i => i.ToString()); model.Products .AddRange( (from item in context.Products .Where(item => numbers.Contains(item.Name.Substring(0, 1))) join category in context.ProductSubcategories on item.ProductSubcategoryID equals category.ProductSubcategoryID into ProductCategory from category in ProductCategory.DefaultIfEmpty() select new ProductModel() { ProductName = item.Name, ProductID = item.ProductID, ProductNumber = item.ProductNumber, Color = (string.IsNullOrEmpty(item.Color)) ? "NA" : item.Color, StandardCost = item.StandardCost, ProductCategory = (string.IsNullOrEmpty(category.Name)) ? "NA" : category.Name }).ToList()); } else { model.Products .AddRange( (from item in context.Products .Where(item => item.Name.Trim().StartsWith(selectedLetter)) join category in context.ProductSubcategories on item.ProductSubcategoryID equals category.ProductSubcategoryID into ProductCategory from category in ProductCategory.DefaultIfEmpty() select new ProductModel() { ProductName = item.Name, ProductID = item.ProductID, ProductNumber = item.ProductNumber, Color = (string.IsNullOrEmpty(item.Color)) ? "NA" : item.Color, StandardCost = item.StandardCost, ProductCategory = (string.IsNullOrEmpty(category.Name)) ? "NA" : category.Name }).ToList()); } } } return View(model); } public ActionResult About() { ViewBag.Message = "Your application description page."; return View(); } public ActionResult Contact() { ViewBag.Message = "Your contact page."; return View(); } } }
public class ProductModel { public int ProductID { get; set; } public string ProductNumber { get; set; } public string ProductName { get; set; } public decimal StandardCost { get; set; } public string Color { get; set; } public string ProductCategory { get; set; } }
public class AlphabeticalPagingViewModel { public List<ProductModel> Products { get; set; } public List<string> FirstLetters { get; set; } public string SelectedLetter { get; set; } }
@model MVCAlphabeticPager.Models.AlphabeticalPagingViewModel <br /> <div class="panel panel-primary"> <div class="panel-heading panel-head">Product Listing</div> <div class="panel-body"> @Html.AlphabeticalPager(Model.SelectedLetter, Model.FirstLetters, x => Url.Action("Index", new { selectedLetter = x })) <table class="table" style="margin: 4px"> <tr> <th> @Html.DisplayName("Product ID") </th> <th> @Html.DisplayName("Product Number") </th> <th> @Html.DisplayName("Product Name") </th> <th> @Html.DisplayName("Standard Cost") </th> <th> @Html.DisplayName("Color") </th> <th> @Html.DisplayName("Category") </th> </tr> @foreach (var item in Model.Products) { <tr> <td> @Html.DisplayFor(modelItem => item.ProductID) </td> <td> @Html.DisplayFor(modelItem => item.ProductNumber) </td> <td> @Html.DisplayFor(modelItem => item.ProductName) </td> <td> @Html.DisplayFor(modelItem => item.StandardCost) </td> <td> @Html.DisplayFor(modelItem => item.Color) </td> <td> @Html.DisplayFor(modelItem => item.ProductCategory) </td> </tr> } </table> @Html.AlphabeticalPager(Model.SelectedLetter, Model.FirstLetters, x => Url.Action("Index", new { selectedLetter = x })) </div> </div>
Cheers! :)
Comments
Post a Comment