• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 一步步打造简单的MVC电商网站BooksStore(4)

一步步打造简单的MVC电商网站BooksStore(4)

作者:反骨仔 字体:[增加 减小] 来源:互联网 时间:2017-05-11

反骨仔通过本文主要向大家介绍了books store,booksstore怎么读,mvc music store,mvc music store教程,focal xs books等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

一步步打造一个简单的 MVC 电商网站 - BooksStore(四)

本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore

《一步步打造一个简单的 MVC 电商网站 - BooksStore(一)》

《一步步打造一个简单的 MVC 电商网站 - BooksStore(二)》

《一步步打造一个简单的 MVC 电商网站 - BooksStore(三)》

《一步步打造一个简单的 MVC 电商网站 - BooksStore(四)》

简介

  上一节我们完成了两个主要功能:完成了整个购物车的流程,以及订单处理(发邮件进行通知),今天我们来学习一下最基本的增删改查,以及登录认证过滤器,加入防 CSRF 攻击,本系列已完结。

  该系列主要功能与知识点如下:

  分类、产品浏览、购物车、结算、CRUD(增删改查) 管理、发邮件、分页、模型绑定、认证过滤器和单元测试等。

【备注】项目使用 VS2015 + C#6 进行开发,有问题请发表在留言区哦,还有,页面长得比较丑,请见谅。

目录

基本的增删改查 CRUD

登录授权认证过滤

基本的增删改查 CRUD

我们创建一个新的控制器进行增删改查功能,AdminController,并添加一个显示所有数据的方法:

/// <summary>
 /// 后台管理控制器
 /// </summary>
 public class AdminController : Controller
 {
 private readonly IBookRepository _bookRepository;

 public AdminController(IBookRepository bookRepository)
 {
  _bookRepository = bookRepository;
 }

 /// <summary>
 /// 首页
 /// </summary>
 /// <returns></returns>
 public ActionResult Index()
 {
  return View(_bookRepository.Books);
 }
 }

</div>

不在沿用之前的布局页了,创建一个新的布局页 _AdmindLayout.cshtml:

<!DOCTYPE html>

<html>
<head>
 <meta name="viewport" content="width=device-width" />
 <title>@ViewBag.Title</title>
 <link href="~/Contents/admin/Site.css" rel="stylesheet" />
</head>
<body>
 <div>
 @RenderBody()
 </div>
</body>
</html>

</div>

Site.css

.table {
 width: 100%;
 padding: 0;
 margin: 0;
}

 .table th {
 font: bold 12px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
 color: #4f6b72;
 border-right: 1px solid #C1DAD7;
 border-bottom: 1px solid #C1DAD7;
 border-top: 1px solid #C1DAD7;
 letter-spacing: 2px;
 text-transform: uppercase;
 text-align: left;
 padding: 6px 6px 6px 12px;
 background: #CAE8EA no-repeat;
 }

 .table td {
 border-right: 1px solid #C1DAD7;
 border-bottom: 1px solid #C1DAD7;
 background: #fff;
 font-size: 14px;
 padding: 6px 6px 6px 12px;
 color: #4f6b72;
 }

 .table td.alt {
  background: #F5FAFA;
  color: #797268;
 }

 .table th.spec, td.spec {
 border-left: 1px solid #C1DAD7;
 }

</div>

对应的Index.cshtml:

@model IEnumerable<Wen.BooksStore.Domain.Entities.Book>

@{
 Layout = "~/Views/Shared/_AdminLayout.cshtml";
}

<p>
 @Html.ActionLink("新增", "Edit")
</p>
<table class="table">
 <tr>
 <th>
  名称
 </th>
 <th>
  描述
 </th>
 <th>
  价格
 </th>
 <th>
  分类
 </th>
 <th></th>
 </tr>

 @foreach (var 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.Id })
  @using (Html.BeginForm("Delete", "Admin", FormMethod.Post, new { style = "display:inline;" }))
  {
   @Html.Hidden("id", item.Id)
   <input type="submit" value="删除" />
  }
  </td>
 </tr>
 }

</table>
</div>

编辑,我把新增和编辑的位置放在一块,使用 id 进行区分,如果 id = 0 就表示新增的信息。

在 AdminCtroller 中添加关于编辑的方法

/// <summary>
 /// 编辑
 /// </summary>
 /// <param name="id"></param>
 /// <returns></returns>
 public ActionResult Edit(int id = 0)
 {
  if (id == 0)
  {
  return View(new Book());
  }

  var model = _bookRepository.Books.FirstOrDefault(x => x.Id == id);
  return View(model);
 }

 /// <summary>
 /// 编辑
 /// </summary>
 /// <param name="book"></param>
 /// <returns></returns>
 [HttpPost]
 public ActionResult Edit(Book book)
 {
  if (!ModelState.IsValid)
  {
  return View(book);
  }

  _bookRepository.SaveBook(book);
  return RedirectToAction("Index");
 }
</div>

更新存储库中的方法:

IBookRepository.cs

/// <summary>
 /// 书存储库接口
 /// </summary>
 public interface IBookRepository
 {
 /// <summary>
 /// 书模型集合
 /// </summary>
 IQueryable<Book> Books { get; }

 /// <summary>
 /// 保存书
 /// </summary>
 /// <param name="book"></param>
 /// <returns></returns>
 int SaveBook(Book book);

 /// <summary>
 /// 删除书
 /// </summary>
 /// <param name="id"></param>
 /// <returns></returns>
 Book DeleteBook(int id);
 }

</div>

EfBookRepository.cs

/// <summary>
 /// 书存储库
 /// </summary>
 public class EfBookRepository : IBookRepository
 {
 private readonly EfDbContext _context = new EfDbContext();

 /// <summary>
 /// 书模型集合
 /// </summary>
 public IQueryable<Book> Books => _context.Books;

 /// <summary>
 /// 保存书
 /// </summary>
 /// <param name="book"></param>
 /// <returns></returns>
 public int SaveBook(Book book)
 {
  if (book.Id == 0)
  {
  _context.Books.Add(book);
  }
  else
  {
  var model = _context.Books.Find(book.Id);

  if (model==null)
  {
   return 0;
  }

  model.Category = book.Category;
  model.Description = book.Description;
  model.Name = book.Name;
  model.Price = book.Price;
  }

  return _context.SaveChanges();
 }

 /// <summary>
 /// 删除书
 /// </summary>
 /// <param name="id"></param>
 /// <returns></returns>
 public Book DeleteBook(int id)
 {
  var model = _context.Books.Find(id);

  if (model == null)
  {
  return null;
  }

  _context.Books.Remove(model);
  _context.SaveChanges();

  return model;
 }
 }
</div>

需要对 Book 模型加上验证用的特性:

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 一步步打造简单的MVC电商网站BooksStore(4)
  • 一步步打造简单的MVC电商网站BooksStore(3)
  • 一步步打造简单的MVC电商网站BooksStore(2)
  • 一步步打造简单的MVC电商网站BooksStore(1)

相关文章

  • 2017-05-11ExecuteReader(),ExecuteNonQuery(),ExecuteScalar(),ExecuteXmlReader()之间的区别
  • 2017-05-11将datagrid控件内容输出到excel文件
  • 2017-05-11asp.net程序编译调试时偶尔出现访问被拒绝的错误的解决方法
  • 2017-05-11在DataTable中执行Select("条件")后,返回DataTable的方法
  • 2017-05-11分享AjaxPro或者Ajax实现机制
  • 2017-05-11.net的socket异步通讯示例分享
  • 2017-05-11解读ASP.NET 5 & MVC6系列教程(17):MVC中的其他新特性
  • 2017-05-11asp.net DropDownList实现二级联动效果
  • 2017-05-11详解ASP.NET Core 之 Identity 入门(三)
  • 2017-05-11详解ASP.NET Core和ASP.NET Framework共享身份验证

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#保存上传来的图片示例代码
    • ASP.NET设计网络硬盘之上传文件实现代码
    • ASP.NET2.0服务器控件之自定义状态管理
    • 获取ashx得到的内容(已处理好的数据)
    • ASP.NET MVC+EF在服务端分页使用jqGrid以及jquery Datatables的注意事项
    • asp.net关于Cookie跨域(域名)的问题
    • asp.net小孔子cms中的数据添加修改
    • asp.net(C#)操作excel(上路篇)
    • 利用ASP.NET MVC+Bootstrap搭建个人博客之praise.js点赞特效插件(二)
    • asp.net Web站点风格切换的实现

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有