zoukankan      html  css  js  c++  java
  • MVC Music Store 在线音乐商店示例分析(12)StoreManagerController

         StoreManagerController商品信息维护管理控制器。该控制器有Authorize特性标记修饰,并且指定了Authorize特性的Roles为"Administrator"。说明该控制器必须是要经过授权才能访问,并且必须是Administrator组的。该控制器用于商品信息的一些维护操作。

    注释后的源代码如下:

    1 /// <summary>
    2 /// 商店管理控制器
    3 /// 规定权限必须是管理员才能使用该控制器
    4 /// </summary>
    5   [Authorize(Roles = "Administrator")]
    6 public class StoreManagerController : Controller
    7 {
    8 MusicStoreEntities storeDB = new MusicStoreEntities();
    9
    10 //
    11 // GET: /StoreManager/
    12   /// <summary>
    13 /// //检索相册并包含其关联的类别以及艺术家对象
    14 /// </summary>
    15 /// <returns></returns>
    16 public ActionResult Index()
    17 {
    18 //检索相册并包含其关联的类别以及艺术家对象
    19 var albums = storeDB.Albums
    20 .Include("Genre").Include("Artist")
    21 .ToList();
    22
    23 return View(albums);
    24 }
    25
    26 //
    27 // GET: /StoreManager/Create
    28 /// <summary>
    29 /// 创建相册
    30 /// </summary>
    31 /// <returns></returns>
    32 public ActionResult Create()
    33 {
    34 //获取所有类别名(根据名称排序后的)
    35 ViewBag.Genres = storeDB.Genres.OrderBy(g => g.Name).ToList();
    36 //获取所有艺术家(根据名称排序后的)
    37 ViewBag.Artists = storeDB.Artists.OrderBy(a => a.Name).ToList();
    38
    39 var album = new Album();
    40 //用空相册对象来填充模型
    41 return View(album);
    42 }
    43
    44 //
    45 // POST: /StoreManager/Create
    46 /// <summary>
    47 /// 创建相册
    48 /// </summary>
    49 /// <param name="album">相册对象</param>
    50 /// <returns></returns>
    51 [HttpPost]
    52 public ActionResult Create(Album album)
    53 {
    54 //模型是否通过验证
    55 if (ModelState.IsValid)
    56 {
    57
    58 //Save Album
    59 //将相册添入数据库并保存
    60 storeDB.Albums.Add(album);
    61 storeDB.SaveChanges();
    62 //重定向到当前控制器下的列表页面
    63 return RedirectToAction("Index");
    64
    65 }
    66
    67 // Invalid – redisplay with errors
    68 //代码运行到这里肯定是模型没有通过验证,所以重新加载页面以便用户修改数据重新提交
    69 ViewBag.Genres = storeDB.Genres.OrderBy(g => g.Name).ToList();
    70 ViewBag.Artists = storeDB.Artists.OrderBy(a => a.Name).ToList();
    71
    72 return View(album);
    73 }
    74
    75 //
    76 // GET: /StoreManager/Edit/5
    77
    78 /// <summary>
    79 /// 编辑指定编号的相册
    80 /// </summary>
    81 /// <param name="id">相册编号</param>
    82 /// <returns></returns>
    83 public ActionResult Edit(int id)
    84 {
    85 //获取所有类别名(根据名称排序后的)
    86 //获取所有艺术家(根据名称排序后的)
    87 ViewBag.Genres = storeDB.Genres.OrderBy(g => g.Name).ToList();
    88 ViewBag.Artists = storeDB.Artists.OrderBy(a => a.Name).ToList();
    89 //获取需要修改指定编号的相册信息
    90 var album = storeDB.Albums.Single(a => a.AlbumId == id);
    91 //呈现界面以便修改
    92 return View(album);
    93 }
    94
    95 //
    96 // POST: /StoreManager/Edit/5
    97 /// <summary>
    98 /// 保存修改
    99 /// </summary>
    100 /// <param name="id"></param>
    101 /// <param name="collection"></param>
    102 /// <returns></returns>
    103 [HttpPost]
    104 public ActionResult Edit(int id, FormCollection collection)
    105 {
    106 //从数据库中提取要修改的那条数据模型
    107 var album = storeDB.Albums.Find(id);
    108
    109 //将表单的数据更新到刚从数据库中提取的模型中
    110 if(TryUpdateModel(album))
    111 {
    112 //保存修改
    113 storeDB.SaveChanges();
    114 //重定向到当前控制器下的Index action
    115 return RedirectToAction("Index");
    116 }
    117 else
    118 {
    119 //如果表单的数据不能正确更新到模型中,则返回到重新编辑界面。
    120 return View(album);
    121 }
    122 }
    123
    124 //
    125 // GET: /StoreManager/Delete/5
    126 /// 此处删除相册信息,我觉得代码有点啰嗦。
    127 /// 没必要在删除的时候先呈现一个要删除的相册详细内容界面。
    128 /// 可以通过列表直接删除就是,顶多弹出一个对话框来确认删除就是。(javascript)
    129 /// 当然这里是另弹出一个确认删除的页面,所以需要呈现模型数据
    130
    131 /// <summary>
    132 /// 删除指定编号的相册信息
    133 /// </summary>
    134 /// <param name="id">相册编号</param>
    135 /// <returns></returns>
    136 public ActionResult Delete(int id)
    137 {
    138 //查找指定编号的相册信息
    139 var album = storeDB.Albums.Find(id);
    140 //呈现出要删除的相册信息,以便确认操作。
    141 return View(album);
    142 }
    143
    144 //
    145 // POST: /StoreManager/Delete/5
    146
    147 /// <summary>
    148 /// 删除指定编号的相册信息
    149 /// 接收提交删除操作的表单。
    150 /// </summary>
    151 /// <param name="id">要删除相册信息的编号</param>
    152 /// <param name="collection">表单数据</param>
    153 /// <returns></returns>
    154 [HttpPost]
    155 public ActionResult Delete(int id, FormCollection collection)
    156 {
    157 //找出要删除的相册信息
    158 var album = storeDB.Albums.Find(id);
    159 //从数据库中删除该条信息
    160 storeDB.Albums.Remove(album);
    161 // 保存修改到数据库
    162 storeDB.SaveChanges();
    163 // 呈现删除后的消息界面
    164 return View("Deleted");
    165 }
    166 }

        Index Action用于呈现相册列表及其相关的详细信息。

        Create Action用于新建相册信息并保存到数据库中。

        Edit Action用于编辑指定编号的相册信息并保存到数据库中。

        Delete Action用于删除指定编号的相册信息并保存到数据库中。

        看完这个StoreManageController之后,觉得少了几个Action。没有提供维护Genre类别、Artist作者、以及Album对象的图片维护的功能。也许作者定义的这个小项目中是不需要这些维护的,但我个人认为还是加上比较好。

  • 相关阅读:
    Power BI 根据用户权限动态生成导航跳转目标
    Power BI Tooltips 增强功能
    Power BI refresh error “could not load file or assembly…provided impersonation level is invalid”
    SQL 错误代码 18456
    如何使用SQL Server Integration Services从多个Excel文件读取数据
    通过表格编辑器将现有表引入Power BI数据流
    Power BI 中动态增长的柱状图
    ambari2.7.3离线安装hdp3.1.0时,ambari-hdp-1.repo中baseurl无值
    ambari 安装 cannot download file mysql-connector-java from http://8080/resource/mysql-connector-java.jar
    洛谷P4180 [BJWC2010]严格次小生成树
  • 原文地址:https://www.cnblogs.com/stevenhqq/p/1971611.html
Copyright © 2011-2022 走看看