• .Net数据库操作


    Web.config配置数据库连接,

      <!-- 配置数据库 -->
      <connectionStrings>
        <add name="EFDbContext" connectionString="Data Source=localhost;Initial Catalog=SportsStore;User ID=sa;Password=123456" providerName="System.Data.SqlClient"/>
      </connectionStrings>
    

    数据库相关类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data.Entity; // 数据库支持
    using SportsStore.Domain.Entities;
    
    namespace SportsStore.Domain.Concrete
    {
        public class EFDbContext : DbContext
        {
            public DbSet<Product> Products { get; set; }
        }
    }
    
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using SportsStore.Domain.Abstract;
    using SportsStore.Domain.Entities;
    
    
    namespace SportsStore.Domain.Concrete
    {
    
        public class EFProductRepository : IProductRepository
        {
            private EFDbContext context = new EFDbContext();
    
            public IEnumerable<Product> Products
            {
                get { return context.Products; }
            }
        }
    }
    
    

    莫名其妙就能得到数据了,

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using SportsStore.Domain.Abstract;
    using SportsStore.Domain.Entities;
    
    namespace SportsStore.WebUI.Controllers
    {
    
        public class ProductController : Controller
        {
            private IProductRepository repository;
    
            public ProductController(IProductRepository productRepository)
            {
                this.repository = productRepository;
            }
    
            public ViewResult List()
            {
                return View(repository.Products);
            }
        }
    }
    

    增加分页

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using SportsStore.Domain.Abstract;
    using SportsStore.Domain.Entities;
    
    namespace SportsStore.WebUI.Controllers
    {
    
        public class ProductController : Controller
        {
            private IProductRepository repository;
            public int PageSize = 4;
    
            public ProductController(IProductRepository productRepository)
            {
                this.repository = productRepository;
            }
    
            public ViewResult List(int page = 1)
            {
                return View(repository.Products
                   .OrderBy(p => p.ProductID)
                   .Skip((page - 1) * PageSize)
                   .Take(PageSize)); // 分页支持
            }
        }
    }
    

    分页模型

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace SportsStore.WebUI.Models
    {
        public class PagingInfo
        {
            public int TotalItems { get; set; }
            public int ItemsPerPage { get; set; }
            public int CurrentPage { get; set; }
            public int TotalPages
            {
                get { return (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage); }
            }
        }
    }
    

    具体的分页模型

    using System.Collections.Generic;
    using SportsStore.Domain.Entities;
    using System;
    using System.Linq;
    using System.Web;
    
    namespace SportsStore.WebUI.Models
    {
        public class ProductsListViewModel
        {
    
            public IEnumerable<Product> Products { get; set; }
            public PagingInfo PagingInfo { get; set; }
        }
    }
    

    获取分页与数据

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using SportsStore.Domain.Abstract;
    using SportsStore.Domain.Entities;
    using SportsStore.WebUI.Models;
    using System.Web.Helpers;
    
    namespace SportsStore.WebUI.Controllers
    {
    
        public class ProductController : Controller
        {
            private IProductRepository repository;
            public int PageSize = 4;
    
            public ProductController(IProductRepository productRepository)
            {
                this.repository = productRepository;
            }
    
            public ViewResult List(int page = 1)
            {
                ProductsListViewModel model = new ProductsListViewModel
                {
                    Products = repository.Products
                   .OrderBy(p => p.ProductID)
                   .Skip((page - 1) * PageSize)
                   .Take(PageSize),
                    PagingInfo = new PagingInfo
                    {
                        CurrentPage = page,
                        ItemsPerPage = PageSize,
                        TotalItems = repository.Products.Count()
                    }
                };
                return View(model);
            }
        }
    }
    

    视图层,展示分页

    @model SportsStore.WebUI.Models.ProductsListViewModel
    
    @{
        ViewBag.Title = "Products";
    }
    
    
    @foreach (var p in Model.Products)
    {
        <div>
            <h3>@p.Name</h3>
            @p.Description
            <h4>@p.Price.ToString("c")</h4>
        </div>
    }
    
    <div>
        @Html.PageLinks(Model.PagingInfo, x => Url.Action("List", new { page = x }))
    </div>
    
    

    增加路由控制

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Routing;
    
    namespace SportsStore.WebUI
    {
        public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                routes.MapRoute(
                    name: null,
                    url: "Page{page}",
                    defaults: new { Controller = "Product", action = "List" }
                );
    
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Product", action = "List", id = UrlParameter.Optional }
                );
            }
        }
    }
    
    

    增加页面布局效果bootstrap
    基础页面

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link href="~/Content/bootstrap.css" rel="stylesheet" />
        <link href="~/Content/bootstrap-theme.css" rel="stylesheet" />
        <title>@ViewBag.Title</title>
    </head>
    <body>
        <div class="navbar navbar-inverse" role="navigation">
            <a class="navbar-brand" href="#">SPORTS STORE</a>
        </div>
        <div class="row panel">
            <div id="categories" class="col-xs-3">
                Put something useful here later
            </div>
            <div class="col-xs-8">
                @RenderBody()
            </div>
        </div>
    </body>
    </html>
    

    列表页面

    @model SportsStore.WebUI.Models.ProductsListViewModel
    
    @{
        ViewBag.Title = "Products";
    }
    
    @foreach (var p in Model.Products)
    {
        <div class="well">
            <h3>
                <strong>@p.Name</strong>
                <span class="pull-right label label-primary">@p.Price.ToString("c")</span>
            </h3>
            <span class="lead"> @p.Description</span>
        </div>
    }
    
    <div class="btn-group pull-right">
        @Html.PageLinks(Model.PagingInfo, x => Url.Action("List", new { page = x }))
    </div>
    

    增加页面模板,可以多处使用

    ProductSummary

    @model SportsStore.Domain.Entities.Product
    
    <div class="well">
        <h3>
            <strong>@Model.Name</strong>
            <span class="pull-right label label-primary">@Model.Price.ToString("c")</span>
        </h3>
        <span class="lead"> @Model.Description</span>
    </div>
    

    改造List页面支持

    @model SportsStore.WebUI.Models.ProductsListViewModel
    
    @{
        ViewBag.Title = "Products";
    }
    
    @foreach (var p in Model.Products)
    {
        @Html.Partial("ProductSummary", p)
    }
    
    <div class="btn-group pull-right">
        @Html.PageLinks(Model.PagingInfo, x => Url.Action("List", new { page = x }))
    </div>
    

    增加分类过滤改造

    分页模型增加元素当前页

    using System.Collections.Generic;
    using SportsStore.Domain.Entities;
    using System;
    using System.Linq;
    using System.Web;
    
    namespace SportsStore.WebUI.Models
    {
        public class ProductsListViewModel
        {
    
            public IEnumerable<Product> Products { get; set; }
            public PagingInfo PagingInfo { get; set; }
            public string CurrentCategory { get; set; }
        }
    }
    

    控制器增加过滤改造

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using SportsStore.Domain.Abstract;
    using SportsStore.Domain.Entities;
    using SportsStore.WebUI.Models;
    using System.Web.Helpers;
    
    namespace SportsStore.WebUI.Controllers
    {
    
        public class ProductController : Controller
        {
            private IProductRepository repository;
            public int PageSize = 2;
    
            public ProductController(IProductRepository productRepository)
            {
                this.repository = productRepository;
            }
    
            public ViewResult List(string category,int page = 1)
            {
                ProductsListViewModel model = new ProductsListViewModel
                {
                    Products = repository.Products
                   .Where(p => category == null || p.Category == category)
                   .OrderBy(p => p.ProductID)
                   .Skip((page - 1) * PageSize)
                   .Take(PageSize),
                    PagingInfo = new PagingInfo
                    {
                        CurrentPage = page,
                        ItemsPerPage = PageSize,
                        TotalItems = repository.Products.Where(p => category == null || p.Category == category).Count()
                    },
                    CurrentCategory = category
                };
                return View(model);
            }
        }
    }
    

    视图层,分页改造

    @model SportsStore.WebUI.Models.ProductsListViewModel
    
    @{
        ViewBag.Title = "Products";
    }
    
    @foreach (var p in Model.Products)
    {
        @Html.Partial("ProductSummary", p)
    }
    
    <div class="btn-group pull-right">
        @Html.PageLinks(Model.PagingInfo, x => Url.Action("List",
            new { page = x, category = Model.CurrentCategory }))
    </div>
    

    路由处理

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Routing;
    
    namespace SportsStore.WebUI
    {
        public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                routes.MapRoute(null,
                   "",
                   new
                   {
                       controller = "Product",
                       action = "List",
                       category = (string)null,
                       page = 1
                   }
               );
    
                routes.MapRoute(null,
                   "Page{page}",
                   new { controller = "Product", action = "List", category = (string)null },
                   new { page = @"d+" }
               );
    
                routes.MapRoute(null,
                    "{category}",
                    new { controller = "Product", action = "List", page = 1 }
                );
    
                routes.MapRoute(null,
                    "{category}/Page{page}",
                    new { controller = "Product", action = "List" },
                    new { page = @"d+" }
                );
    
                routes.MapRoute(null, "{controller}/{action}");
    
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Product", action = "List", id = UrlParameter.Optional }
                );
            }
        }
    }
    
    

    增加导航控制器

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace SportsStore.WebUI.Controllers
    {
        public class NavController : Controller
        {
            public string Menu()
            {
                return "Hello from NavController";
            }
        }
    }
    

    基础模板引入导航

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link href="~/Content/bootstrap.css" rel="stylesheet" />
        <link href="~/Content/bootstrap-theme.css" rel="stylesheet" />
        <title>@ViewBag.Title</title>
    </head>
    <body>
        <div class="navbar navbar-inverse" role="navigation">
            <a class="navbar-brand" href="#">SPORTS STORE</a>
        </div>
        <div class="row panel">
            <div id="categories" class="col-xs-3">
                @Html.Action("Menu", "Nav")
            </div>
            <div class="col-xs-8">
                @RenderBody()
            </div>
        </div>
    </body>
    </html>
    

    继续修饰菜单

    控制器获取分类数据

    using System.Collections.Generic;
    using System.Web.Mvc;
    using SportsStore.Domain.Abstract;
    using System.Linq;
    
    namespace SportsStore.WebUI.Controllers
    {
    
        public class NavController : Controller
        {
            private IProductRepository repository;
    
            public NavController(IProductRepository repo)
            {
                repository = repo;
            }
    
            public PartialViewResult Menu()
            {
                IEnumerable<string> categories = repository.Products
                                        .Select(x => x.Category)
                                        .Distinct()
                                        .OrderBy(x => x);
                return PartialView(categories);
            }
        }
    }
    
    

    新建View页面

    
    @model IEnumerable<string>
    
    @Html.ActionLink("Home", "List", "Product", null,
        new { @class = "btn btn-block btn-default btn-lg" })
    
    @foreach (var link in Model)
    {
        @Html.RouteLink(link, new
    {
        controller = "Product",
        action = "List",
        category = link,
        page = 1
    }, new
    {
        @class = "btn btn-block btn-default btn-lg"
    })
    }
    

    菜单增加高亮

    using System.Collections.Generic;
    using System.Web.Mvc;
    using SportsStore.Domain.Abstract;
    using System.Linq;
    
    namespace SportsStore.WebUI.Controllers
    {
    
        public class NavController : Controller
        {
            private IProductRepository repository;
    
            public NavController(IProductRepository repo)
            {
                repository = repo;
            }
    
            public PartialViewResult Menu(string category = null)
            {
                ViewBag.SelectedCategory = category;
                IEnumerable<string> categories = repository.Products
                                        .Select(x => x.Category)
                                        .Distinct()
                                        .OrderBy(x => x);
                return PartialView(categories);
            }
        }
    }
    
    
    
    @model IEnumerable<string>
    
    @Html.ActionLink("Home", "List", "Product", null,
        new { @class = "btn btn-block btn-default btn-lg" })
    
    @foreach (var link in Model)
    {
        @Html.RouteLink(link, new
    {
        controller = "Product",
        action = "List",
        category = link,
        page = 1
    }, new
    {
        @class = "btn btn-block btn-default btn-lg" + (link == ViewBag.SelectedCategory ? " btn-primary" : "") // 增加高亮
    })
    }
    

    此博文不清晰,作者都是晕头鸭。请搜索其他文章学习。

  • 相关阅读:
    浅谈“踹”字典树
    2019.11.9 csp-s 考前模拟
    Luogu P1600[NOIP2016]day1 T2天天爱跑步
    Luogu P1197 [JSOI2008]星球大战
    Trie树(字典树)整理
    洛谷P3294 [SCOI2016]背单词——题解
    浅析差分及其推广(树上差分与广义差分)
    洛谷P1600 天天爱跑步——题解
    深入理解容斥原理
    花式求LCA
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/6962120.html
Copyright © 2020-2023  润新知