zoukankan      html  css  js  c++  java
  • 第10章 SportsStorePeta 管理

    一、添加分类管理

      1.创建CRUD控制器

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using SportsStorePeta.Domain.Abstract;
    
    namespace SportsStorePeta.WebUI.Controllers
    {
        public class AdminController : Controller
        {
            private IProductRepository _repository;
    
            public AdminController(IProductRepository repo)
            {
                _repository = repo;
            }
    
            public ViewResult Index()
            {
                return View(_repository.Products);
            }
    
        }
    }

      2.创建新布局(_AdminLoyout.cshtml)

    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <link href="~/Content/Admin.css" rel="stylesheet" type="text/css"/>
        <title>@ViewBag.Title</title>
    
    </head>
    <body>
        <div>
            @RenderBody()
        </div>
    </body>
    </html>

        新建Admin.CSS

      

    body ,td {
        font-family: Segoe UI, Verdana;
    }
    h1 {
        padding: .5em;padding-top: 0;font-weight: bold;
        font-size: 1.5em;border-bottom: 2px solid gray;
    }
    
    div#content{ padding: .9em;}
    table.grid td,table.grid th {
        border-bottom: 1px dotted gray;text-align: left;
    }
    
    table.grid {
        border-collapse: collapse;width: 100%;
    }
    
    table.grid th.NumericCol,table.grid td.NumericCol {
        text-align: right;padding-right: 1em;
    }
    
    form{ margin-bottom: 0px;}
    
    div.Message {
        background: gray;color: white;padding: .2em;margin-top: .25em;
    }
    
    /* Styles for validation helpers
    -----------------------------------------------------------*/
    .field-validation-error {
        color: #f00;display: block;
    }
    
    .field-validation-valid {
        display: none;
    }
    
    .input-validation-error {
        border: 1px solid #f00;
        background-color: #ffeeee;
    }
    
    .validation-summary-errors {
        font-weight: bold;
        color: #f00;
    }
    
    .validation-summary-valid {
        display: none;
    }

      3.实现List视图Admin/Index 

    @using SportsStorePeta.Domain.Entities
    @model IEnumerable<SportsStorePeta.Domain.Entities.Product>
    
    @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_AdminLoyout.cshtml";
    }
    
    <h2>Index</h2>
    <P>
        @Html.ActionLink("新建", "Create")
    </P>
    <table>
        <thead>
        <tr>
            <th>@Html.DisplayNameFor(m => m.Name)</th>
            <th>@Html.DisplayNameFor(m => m.Description)</th>
            <th>@Html.DisplayNameFor(m => m.Price)</th>
            <th>@Html.DisplayNameFor(m => m.Category)</th>
            <th></th>
        </tr>
        </thead>
        <tbody>
            @foreach (Product item in Model)
            {
                <tr>
                    <td>@Html.DisplayFor(modelItem => item.Name)</td>
                    <td>@Html.DisplayFor(modelItem => item.Description)</td>
                    <td>@Html.DisplayFor(modelItem => item.Price)</td>
                    <td>@Html.DisplayFor(modelItem => item.Category)</td>
                    <td>
                        @Html.ActionLink("修改", "Edit", new {id = item.ProductId})|
                        @Html.ActionLink("详细", "Details", new {id = item.ProductId})|
                        @Html.ActionLink("删除","Delete",new{id=item.ProductId})
                    </td>
                </tr>
            }
        </tbody>
    </table>

       紧凑型视图:  

    @using SportsStorePeta.Domain.Entities
    @model IEnumerable<SportsStorePeta.Domain.Entities.Product>
    
    @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_AdminLoyout.cshtml";
    }
    
    <h2>所有产品</h2>
    
    <table class="grid">
        <thead>
        <tr>
            <th>序号</th>
            <th>名称</th>
            <th class="NumericCol">价格</th>
            <th>删除</th>
            <th></th>
        </tr>
        </thead>
        <tbody>
    
        @{ int i = 0;}
        @foreach (Product item in Model)
        {
            i = i + 1;
             <tr>
                <td>@i</td>
                <td>@Html.ActionLink(item.Name, "Edit", new {item.ProductId})</td>
                <td class="NumericCol">@item.Price.ToString("C")</td>
                <td>
                    @using (Html.BeginForm("Delete", "Admin"))
                    {
                        @Html.Hidden("ProductId", item.ProductId)
                        <input type="submit" value="删除"/>
                    }
                </td>
            </tr>
        }
        </tbody>
    </table>
    <P>
        @Html.ActionLink("新建", "Create")
    </P>

      4.编辑产品

         创建Edit动作方法

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using SportsStorePeta.Domain.Abstract;
    using SportsStorePeta.Domain.Entities;
    
    namespace SportsStorePeta.WebUI.Controllers
    {
        public class AdminController : Controller
        {
            private IProductRepository _repository;
    
            public AdminController(IProductRepository repo)
            {
                _repository = repo;
            }
    
            public ViewResult Index()
            {
                return View(_repository.Products);
            }
    
            public ViewResult edit(int productId)
            {
                Product product = _repository.Products.FirstOrDefault(p => p.ProductId == productId);
                return View(product);
            }
        }
    }

        创建Edit视图  

    @model SportsStorePeta.Domain.Entities.Product
    
    @{
        ViewBag.Title = "Admin 编辑 "+@Model.Name;
        Layout = "~/Views/Shared/_AdminLoyout.cshtml";
    }
    
    <h2>编辑 @Model.Name</h2>
    @using (Html.BeginForm())
    {
        @Html.EditorForModel()
        <input type="submit" value="保存"/>
        @Html.ActionLink("取消并返回列表","Index")
    }

      对ORM模型类添加注解属性: 

    [MetadataType(typeof(ProductMetaData))]
        public partial class Product : DbContextDB.Record<Product>  
        {
          ...
         }

      添加Product类的注解属性类:  

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ComponentModel.DataAnnotations;
    using System.Web.Mvc;
    
    namespace SportsStorePeta.Domain.Entities
    {
        public partial class ProductMetaData
        {
            [HiddenInput(DisplayValue = false)]
            public int ProductId { get; set; }
    
            [Display(Name = "产品名称")]
            public string Name { get; set; }
    
            [DataType(DataType.MultilineText)]
            [Display(Name = "描述")]
            public string Description { get; set; }
    
            [Display(Name = "类别")]
            public string Category { get; set; }
    
            [Display(Name = "价格")]
            public decimal Price { get; set; }
    
        }
    }

        添加CSS样式  

    .editor-field{ margin-bottom: .8em;}
    .editor-label{ font-weight: bold;}
    .editor-label:after{content: ":"}
    .text-box{ width: 25em;}
    .multi-line {
        height: 5em;font-family: Segoe UI, Verdana;
    }

        更新产品存储库  

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using SportsStorePeta.Domain.Entities;
    
    namespace SportsStorePeta.Domain.Abstract
    {
       public interface IProductRepository
        {
           IQueryable<Product> Products { get; }
           void SaveProduct(Product product);
        }
    }

       实现SaveProduct方法

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using SportsStorePeta.Domain.Abstract;
    using SportsStorePeta.Domain.Entities;
    
    namespace SportsStorePeta.Domain.Concrete
    {
       public class PpProductRepository :IProductRepository
        {
           private readonly PpContext _context=new PpContext();
           public IQueryable<Product> Products
           {
               get { return _context.Products; }
           }
    
           public void SaveProduct(Product product)
           {
               _context.Save(product);  //自动判断新增、修改
           }
        }
    }

      处理Edit的Post请求  

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using SportsStorePeta.Domain.Abstract;
    using SportsStorePeta.Domain.Entities;
    
    namespace SportsStorePeta.WebUI.Controllers
    {
        public class AdminController : Controller
        {
            private IProductRepository _repository;
    
            public AdminController(IProductRepository repo)
            {
                _repository = repo;
            }
    
            public ViewResult Index()
            {
                return View(_repository.Products);
            }
    
            public ViewResult Edit(int productId)
            {
                Product product = _repository.Products.FirstOrDefault(p => p.ProductId == productId);
                return View(product);
            }
    
            [HttpPost]
            public ActionResult Edit(Product product)
            {
                if (ModelState.IsValid)
                {
                    _repository.SaveProduct(product);
                    TempData["message"] = string.Format("{0} 已经保存。", product.Name);
                    return RedirectToAction("Index");
                }
                else
                {
                    return View(product);
                }
            }
        }
    }

      显示确认消息  

    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <link href="~/Content/Admin.css" rel="stylesheet" type="text/css"/>
        <title>@ViewBag.Title</title>
    
    </head>
    <body>
    <div>
        @if (TempData["message"] != null)
        {
            <div class="Message">@TempData["message"]</div>
        }
        @RenderBody()
    </div>
    </body>
    </html> 

        添加模型验证

      

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ComponentModel.DataAnnotations;
    using System.Web.Mvc;
    
    namespace SportsStorePeta.Domain.Entities
    {
        public partial class ProductMetaData
        {
            [HiddenInput(DisplayValue = false)]
            public int ProductId { get; set; }
    
            [Display(Name = "产品名称")]
            [Required(ErrorMessage = "请输入产品名称")]
            public string Name { get; set; }
    
            [DataType(DataType.MultilineText)]
            [Display(Name = "描述")]
            [Required(ErrorMessage = "请输入产品描述")]
            public string Description { get; set; }
    
            [Display(Name = "类别")]
            [Required(ErrorMessage = "请指定产品类别")]
            public string Category { get; set; }
    
            [Display(Name = "价格")]
            [Required]
            [Range(0.01,Double.MaxValue,ErrorMessage = "请输入真实的价格")]
            public decimal Price { get; set; }
    
        }
    }

        启用客户端验证  

    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <link href="~/Content/Admin.css" rel="stylesheet" type="text/css"/>
        <script src="~/Scripts/jquery-1.8.2.min.js"></script>
        <script src="~/Scripts/jquery.validate.min.js"></script>
        <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
        <title>@ViewBag.Title</title>
    
    </head>
    <body>
    <div>
        @if (TempData["message"] != null)
        {
            <div class="Message">@TempData["message"]</div>
        }
        @RenderBody()
    </div>
    </body>
    </html>

          5.创建新产品

        添加Create 动作方法  

            public ViewResult Create()
            {
                return View("Edit", new Product());
            }

        修改共用的Edit视图  

    @model SportsStorePeta.Domain.Entities.Product
    
    @{
        ViewBag.Title = "Admin 编辑 "+@Model.Name;
        Layout = "~/Views/Shared/_AdminLoyout.cshtml";
    }
    
    <h2>编辑 @Model.Name</h2>
    @using (Html.BeginForm("Edit","Admin"))
    {
        @Html.EditorForModel()
        <input type="submit" value="保存"/>
        @Html.ActionLink("取消并返回列表","Index")
    }

      6.删除产品

        接口添加删除方法

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using SportsStorePeta.Domain.Entities;
    
    namespace SportsStorePeta.Domain.Abstract
    {
       public interface IProductRepository
        {
           /// <summary>
           /// 获得产品集合
           /// </summary>
           IQueryable<Product> Products { get; }
           /// <summary>
           /// 产品信息修改保存
           /// </summary>
           /// <param name="product"></param>
           void SaveProduct(Product product);
    
           /// <summary>
           /// 删除产品
           /// </summary>
           /// <param name="productId"></param>
           /// <returns></returns>
           Product DeleteProduct(int productId);
        }
    }

        实体框架删除方法实现

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using SportsStorePeta.Domain.Abstract;
    using SportsStorePeta.Domain.Entities;
    
    namespace SportsStorePeta.Domain.Concrete
    {
       public class PpProductRepository :IProductRepository
        {
           private readonly PpContext _context=new PpContext();
           public IQueryable<Product> Products
           {
               get { return _context.Products; }
           }
    
           public void SaveProduct(Product product)
           {
               _context.Save(product);  //自动判断新增、修改
           }
    
           public Product DeleteProduct(int productId)
           {
               Product dbProduct = _context.FirstOrDefault<Product>("Where ProductId=@ProductId",
                   new {ProductId = productId});
               if (dbProduct != null)
               {
                   _context.Delete<Product>(dbProduct);
               }
               return dbProduct;
           }
        }
    }

        添加Delete动作方法

            [HttpPost]
            public ActionResult Delete(int productId)
            {
                Product deleteProduct = _repository.DeleteProduct(productId);
                if (deleteProduct != null)
                {
                    TempData["message"] = string.Format("{0} 已经被删除。", deleteProduct.Name);
                }
                return RedirectToAction("Index");
            }

    源码:http://yunpan.cn/cdAUcvqdNaLAx 访问密码 65f3

  • 相关阅读:
    C8051逆向电阻屏:头儿拍脑袋说电阻屏IC好赚钱3块钱成本能卖20几块。,一个月不分昼夜逆向成功后头儿说电阻屏已经被市场淘汰请放弃治疗。
    Google大数据三篇著名论文----中文版
    推荐相关博客
    基于hadoop的电影推荐结果可视化
    爬虫(heritrix框架)
    标准SVD和改进的SVD
    基于矩阵分解的隐因子模型
    SVD奇异值分解的几何物理意义资料汇总
    (大数据工程师学习路径)第五步 MySQL参考手册中文版----MySQL数据库管理
    (大数据工程师学习路径)第五步 MySQL参考手册中文版----MySQL视图
  • 原文地址:https://www.cnblogs.com/wjs5943283/p/4693677.html
Copyright © 2011-2022 走看看