ASP.NET MVC4入門教程(九):查詢詳細資料和刪除記錄_自學過程

來源:互聯網
上載者:User

在本教程中,您將查看自動產生的Details和Delete方法。

查詢詳細資料和刪除記錄開啟Movie控制器並查看Details方法。

public ActionResult Details(int id = 0){  Movie movie = db.Movies.Find(id);  if (movie == null)  {    return HttpNotFound();  }  return View(movie);}

Code First 使得您可以輕鬆的使用Find方法來搜尋資料。一個重要的安全功能內建到了方法中。方法首先驗證Find方法已經找到了一部電影,然後再執行其它代碼。例如,駭客可以通過更改http://localhost:xxxx/Movies/Details/1http://localhost:xxxx/Movies/Details/12345 (或某些其它值,不代表實際影片的值)從而使得連結URL 出現錯誤。如果您沒有檢測是否找到了Movie, null Movie會導致出現資料錯誤。

查看Delete和DeleteConfirmed方法。

// GET: /Movies/Delete/5 public ActionResult Delete(int id = 0){  Movie movie = db.Movies.Find(id);  if (movie == null)  {    return HttpNotFound();  }  return View(movie);} //// POST: /Movies/Delete/5 [HttpPost, ActionName("Delete")]public ActionResult DeleteConfirmed(int id = 0){  Movie movie = db.Movies.Find(id);  if (movie == null)  {    return HttpNotFound();  }  db.Movies.Remove(movie);  db.SaveChanges();  return RedirectToAction("Index");}

請注意,Delete的HTTP Get 方法不會刪除指定的電影,它返回刪除電影的視圖,您可以在此視圖中提交 (HttpPost) 刪除電影。如果使用GET 請求執行刪除操作(或者執行編輯操作,建立操作或者更改資料的任何其它操作) 開闢了一個安全性漏洞。對此的詳細資料,請參閱斯蒂芬 · 瓦爾特的部落格ASP.NET MVC Tip #46 — Don't use Delete Links because they create Security Holes.

將刪除資料的HttpPost方法命名為唯一簽名或名稱的 DeleteConfirmed 方法。這兩個方法的簽名如下所示:

// GET: /Movies/Delete/5public ActionResult Delete(int id = 0) //// POST: /Movies/Delete/5[HttpPost, ActionName("Delete")]public ActionResult DeleteConfirmed(int id = 0)

通用語言執行平台 (CLR)重載方法時,需要方法具有獨特唯一的簽名 (方法名稱相同但不同的參數列表)。但是,在這裡您需要兩種刪除方法 — — 一個 GET方法和一個POST方法它們都具有相同的簽名。(他們都需要接受一個整數作為參數)。

要解決這一點,可以有幾種辦法。一是使用不同的方法名稱。這是架構代碼在前面的樣本中所使用的方法。然而,這就帶來了一個小問題: ASP.NET 將部分的 URL按名稱映射到操作方法,如果您重新命名了方法,通常Routing將無法找到該方法。解決方案是您在樣本中看到的,將ActionName("Delete")屬性添加到DeleteConfirmed 方法。這會有效執行Routing系統的Url映射,這樣一個包含/Delete/的 POST 請求的URL 將找到DeleteConfirmed 方法。

另一個常見的方法,來避免具有相同名稱和簽名的方法,是人為地改變POST 方法,包括未使用參數的簽名。例如,有些開發人員添加參數類型 FormCollection,FormCollection是會傳遞給 POST 方法的,然後根本不使用此參數:

public ActionResult Delete(FormCollection fcNotUsed, int id = 0){  Movie movie = db.Movies.Find(id);  if (movie == null)  {    return HttpNotFound();  }  db.Movies.Remove(movie);  db.SaveChanges();  return RedirectToAction("Index");}

您現在有一個完整的 ASP.NET MVC 應用程式並在本地的 DB 資料庫中儲存資料。您可以建立、 讀取、 更新、 刪除和搜尋電影。

如果您想要部署應用程式,最好先在您本地的IIS 7 伺服器上測試一下您的應用程式。您可以使用此 Web Platform Installer 連結啟用IIS伺服器的 ASP.NET 應用程式的設定。請參閱下面的部署連結:

· Test your ASP.NET MVC or WebForms Application on IIS 7 in 30 seconds

· ASP.NET Deployment Content Map

· Enabling IIS 7.x

· Web Application Projects Deployment

現在鼓勵您開始學習中級內容 Creating an Entity Framework Data Model for an ASP.NET MVC Application 和 MVC Music Store 教程, 瀏覽 ASP.NET articles on MSDN,的文章,再看看很多的視頻和資源:http://asp.net/mvc來瞭解更多關於 ASP.NET MVC 的資訊 ! ASP.NET MVC forums 論壇是一個好地方,可以用來問您想要知道的問題。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.