在本教程中,您將查看自動生成的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/1到http://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/5
public
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
· 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 論壇是一個好地方,可以用來問您想要知道的問題。
原文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/03/07/2948000.html