MVC神韻---你想在哪解脫!(十八)

數據的修改視圖

首先打開Movie控制器,添加一個返回數據修改視圖的Edit()方法與一個對該視圖中的表單提交進行處理的Edit()方法,代碼以下所示:javascript

 1 // GET: /Movies/Edit 
 2 public ActionResult Edit(int id)
 3 {
 4         Movie movie = db.Movies.Find(id);
 5         if (movie == null)
 6             return RedirectToAction("Index");
 7  
 8         return View(movie);
 9 }
10 // 
11 // POST: /Movies/Edit 
12 [HttpPost]
13 public ActionResult Edit(Movie model)
14 {
15         try
16         {
17             var movie = db.Movies.Find(model.ID);
18  
19             UpdateModel(movie);
20             db.SaveChanges();
21             return RedirectToAction("Details", new { id = model.ID });
22         }
23         catch (Exception)
24         {
25             ModelState.AddModelError("", "修改失敗,請查看詳細錯誤信息。");
26         }
27  
28         return View(model);
29 }

 

這兩個Edit方法中,第一個方法將在用戶點擊外部畫面的編輯連接時被調用,用來在瀏覽器中顯示數據修改視圖,而且在該視圖中顯示用戶選擇編輯的數據。第二個Edit方法前面帶有一個[HttpPost]標記,負責將修改數據視圖中提交的表單數據綁定到一個用模型建立出來的Movie對象實例之上(當用戶在表單中完成數據修改並點擊保存按鈕的時候進行提交),UpdateModel(movie)方法將調用模型拷貝器,該模型拷貝器將修改後的數據(使用model參數,該參數指向一個各屬性值爲編輯後數據的Movie對象實例)拷貝到數據庫中(即爲數據的保存過程)。在保存數據的過程當中若是發生任何錯誤而致使保存失敗的話,則畫面從新返回到數據修改視圖。接下來讓咱們來追加該數據修改視圖、在Edit方法中點擊鼠標右鍵,選擇添加視圖,依然勾選建立強類型視圖,模型類選擇Movie,在支架模板中選擇「Edit」(修改數據),如圖所示:html

若是要建立中文網站或應用程序,則將默認生成的Edit.cshtml文件中有關英文文字修改成中文,修改完畢後java

該文件中的代碼以下所示:jquery

 

 1 @model MvcMovie.Models.Movie
 2 @{
 3     ViewBag.Title = "修改電影信息";
 4 }
 5 <h2>修改電影信息</h2>
 6 <script src="@Url.Content("~/Scripts/jquery.validate.min.js")"
 7 type="text/javascript"></script>
 8 <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"
 9 type="text/javascript"></script>
10 @using (Html.BeginForm()) {
11     @Html.ValidationSummary(true)
12     <fieldset>
13         <legend>電影</legend>
14  
15         @Html.HiddenFor(model => model.ID)
16  
17         <div class="editor-label">
18             標題
19         </div>
20         <div class="editor-field">
21             @Html.EditorFor(model => model.Title)
22             @Html.ValidationMessageFor(model => model.Title)
23         </div>
24  
25         <div class="editor-label">
26             發行日期
27         </div>
28         <div class="editor-field">
29             @Html.EditorFor(model => model.ReleaseDate)
30             @Html.ValidationMessageFor(model => model.ReleaseDate)
31         </div>
32  
33         <div class="editor-label">
34             種類
35         </div>
36         <div class="editor-field">
37             @Html.EditorFor(model => model.Genre)
38             @Html.ValidationMessageFor(model => model.Genre)
39         </div>
40  
41         <div class="editor-label">
42             票價
43         </div>
44         <div class="editor-field">
45             @Html.EditorFor(model => model.Price)
46             @Html.ValidationMessageFor(model => model.Price)
47         </div>
48  
49         <div class="editor-label">
50             電影等級
51         </div>
52         <div class="editor-field">
53             @Html.EditorFor(model => model.Rating)
54             @Html.ValidationMessageFor(model => model.Rating)
55         </div>
56  
57         <p>
58             <input type="submit" value="保存" />
59         </p>
60     </fieldset>
61 }
62 <div>
63     @Html.ActionLink("返回電影清單", "Index")
64 </div>
View Code

 

從新運行應用程序,在電影清單畫面中點擊某個電影的編輯連接,瀏覽器顯示畫面如圖所示:數據庫

在該視圖中修改選中的數據,而後點擊保存按鈕,瀏覽器將修改後的數據顯示在明細數據視圖中,如圖:瀏覽器

數據的刪除視圖

 

首先打開Movie控制器,添加一個返回數據刪除視圖的Delete()方法與一個對該視圖中的表單提交進行處理的Delete方法,代碼以下所示:安全

 

 1 //GET: /Movies/Delete 
 2 public ActionResult Delete(int id)
 3 {
 4     Movie movie = db.Movies.Find(id);
 5     if (movie == null)
 6         return RedirectToAction("Index");
 7  
 8     return View(movie);
 9 }
10 // 
11 // POST: /Movies/Delete
12 [HttpPost]
13 public RedirectToRouteResult Delete(int id,FormCollection collection)
14 {
15     var movie = db.Movies.Find(id);
16     db.Movies.Remove(movie);
17     db.SaveChanges();
18     return RedirectToAction("Index");
19 }

 

這裏請注意第一個沒有[HttpPost]標記的Delete()方法並不會將數據刪除,由於若是經過GET請求而(刪除或追加、修改)刪除數據的話都會打開一個安全漏洞。RedirectToRouteResult返回重定向到路由新地址。ide

接下來讓咱們來追加該數據刪除視圖、在Delete方法中點擊鼠標右鍵,選擇添加視圖,依然勾選建立強類型視圖,模型類選擇Movie,在支架模板中選擇「Delete」刪除數據),如圖所示:測試

 Delete.cshtml文件(刪除數據視圖)中的代碼以下:網站

 

 1 @model MvcMovie.Models.Movie
 2  
 3 @{
 4     ViewBag.Title = "刪除電影數據";
 5 }
 6  
 7 <h2>刪除電影數據</h2>
 8  
 9 <h3>你確實想將這條電影數據刪除嗎?</h3>
10 <fieldset>
11     <legend>電影</legend>
12  
13     <div class="display-label">標題</div>
14     <div class="display-field">@Model.Title</div>
15  
16     <div class="display-label">發行日期</div>
17     <div class="display-field">@String.Format("{0:d}",
18 Model.ReleaseDate)</div>
19     <div class="display-label">種類</div>
20     <div class="display-field">@Model.Genre</div>
21     <div class="display-label">票價</div>
22     <div class="display-field">@String.Format("{0:F}", Model.Price)</div>
23     <div class="display-label">電影等級</div>
24     <div class="display-field">@Model.Rating</div>
25 </fieldset>
26 @using (Html.BeginForm()) {
27     <p>
28         <input type="submit" value="刪除" /> |
29         @Html.ActionLink("返回電影清單", "Index")
30     </p>
31 } 
View Code

 

在電影清單畫面中點擊一條數據的刪除按鈕,瀏覽器打開數據刪除視圖,如圖所示:

   點擊刪除按鈕,該條數據將被刪除,瀏覽器中返回顯示電影清單畫面。最後咱們聊一下關於Model First與Code First 方法,我建議對於大型項目仍是老老實實用數據建模做爲起點,也就是使用Model First做爲大型項目的開端,對於小型項目或者臨時修改變更可使用Code First來構建數據庫,對於現成項目的添加Database First方法會比較好。筆者在開發小項目時,發現VS2012居然沒有ADO.NET 實體模型,後來才知道是由於升級後形成異常,安裝EF居然裝不上,後來索性安裝了vs2013。如今以爲連軟件升級也要先要測試一下才安全!

相關文章
相關標籤/搜索