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

你可能感兴趣的:(controller)