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对象的图片维护的功能。也许作者定义的这个小项目中是不需要这些维护的,但我个人认为还是加上比较好。

  • 相关阅读:
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    重读《深入理解Java虚拟机》三、Java虚拟机执行的数据入口(类文件结构)
  • 原文地址:https://www.cnblogs.com/stevenhqq/p/1971611.html
Copyright © 2011-2022 走看看