ASP.NET MVC4入門教程(九):查詢詳細信息和刪除記錄
在本教程中,您將查看自動生成的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方法來搜索數(shù)據(jù)。一個重要的安全功能內(nèi)置到了方法中。方法首先驗證Find方法已經(jīng)找到了一部電影,然后再執(zhí)行其它代碼。例如,黑客可以通過更改http://localhost:xxxx/Movies/Details/1到http://localhost:xxxx/Movies/Details/12345 (或某些其它值,不代表實際影片的值)從而使得鏈接URL 出現(xiàn)錯誤。如果您沒有檢測是否找到了Movie, null Movie會導(dǎo)致出現(xiàn)數(shù)據(jù)錯誤。
查看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 請求執(zhí)行刪除操作(或者執(zhí)行編輯操作,創(chuàng)建操作或者更改數(shù)據(jù)的任何其它操作) 開辟了一個安全漏洞。對此的詳細信息,請參閱斯蒂芬 · 瓦爾特的博客ASP.NET MVC Tip #46 — Don't use Delete Links because they create Security Holes.
將刪除數(shù)據(jù)的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)重載方法時,需要方法具有獨特唯一的簽名 (方法名稱相同但不同的參數(shù)列表)。但是,在這里您需要兩種刪除方法 — — 一個 GET方法和一個POST方法它們都具有相同的簽名。(他們都需要接受一個整數(shù)作為參數(shù))。
要解決這一點,可以有幾種辦法。一是使用不同的方法名稱。這是框架代碼在前面的示例中所使用的方法。然而,這就帶來了一個小問題: ASP.NET 將部分的 URL按名稱映射到操作方法,如果您重命名了方法,通常Routing將無法找到該方法。解決方法是您在示例中看到的,將ActionName("Delete")屬性添加到DeleteConfirmed 方法。這會有效的執(zhí)行Routing系統(tǒng)的Url映射,這樣一個包含/Delete/的 POST 請求的URL 將找到DeleteConfirmed 方法。
另一個常見的方法,來避免具有相同名稱和簽名的方法,是人為地改變POST 方法,包括未使用參數(shù)的簽名。例如,有些開發(fā)人員添加參數(shù)類型 FormCollection,FormCollection是會傳遞給 POST 方法的,然后根本不使用此參數(shù):
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");
}
您現(xiàn)在有一個完整的 ASP.NET MVC 應(yīng)用程序并在本地的 DB 數(shù)據(jù)庫中存儲數(shù)據(jù)。您可以創(chuàng)建、 讀取、 更新、 刪除和搜索電影。
如果您想要部署應(yīng)用程序,最好先在您本地的IIS 7 服務(wù)器上測試一下您的應(yīng)用程序。您可以使用此 Web Platform Installer 鏈接啟用IIS服務(wù)器的 ASP.NET 應(yīng)用程序的設(shè)置。請參閱下面的部署鏈接:
· Test your ASP.NET MVC or WebForms Application on IIS 7 in 30 seconds
· ASP.NET Deployment Content Map
· Web Application Projects Deployment
現(xiàn)在鼓勵您開始學(xué)習(xí)中級內(nèi)容 Creating an Entity Framework Data Model for an ASP.NET MVC Application 和 MVC Music Store 教程, 瀏覽 ASP.NET articles on MSDN,的文章,再看看很多的視頻和資源:http://asp.net/mvc來了解更多關(guān)于 ASP.NET MVC 的信息 ! ASP.NET MVC forums 論壇是一個好地方,可以用來問您想要知道的問題。
- 基于Asp.Net MVC4 Bundle捆綁壓縮技術(shù)的介紹
- 使用asp.net MVC4中的Bundle遇到的問題及解決辦法分享
- ASP.NET MVC4之js css文件合并功能(3)
- ASP.NET MVC4 HtmlHelper擴展類,實現(xiàn)分頁功能
- ASP.NET MVC4入門教程(一):入門介紹
- ASP.NET MVC4入門教程(二):添加一個控制器
- ASP.NET MVC4入門教程(三):添加一個視圖
- ASP.NET MVC4入門教程(四):添加一個模型
- ASP.NET MVC4入門教程(五):從控制器訪問數(shù)據(jù)模型
- ASP.NET MVC4入門教程(六):驗證編輯方法和編輯視圖
- ASP.NET MVC4入門教程(七):給電影表和模型添加新字段
- ASP.NET MVC4入門教程(八):給數(shù)據(jù)模型添加校驗器
相關(guān)文章
在ASP.NET 2.0中操作數(shù)據(jù)之十:使用 GridView和DetailView實現(xiàn)的主/從報表
本文我們主要研究了如何使用可選擇行的GridView顯示主記錄,以及在DetailsView中顯示選中記錄的詳細信息。2016-05-05
在ASP.NET 2.0中操作數(shù)據(jù)之二:創(chuàng)建一個業(yè)務(wù)邏輯層
本文主要介紹 ASP.NET 2.0 如何創(chuàng)建業(yè)務(wù)邏輯層,業(yè)務(wù)邏輯層主要定義一些業(yè)務(wù)規(guī)則,調(diào)用已經(jīng)定義好的數(shù)據(jù)庫訪問層代碼,將讀取、插入、修改以及刪除等方法應(yīng)用到合適的業(yè)務(wù)規(guī)則中。2016-04-04
在ASP.NET 2.0中操作數(shù)據(jù)之一:創(chuàng)建一個數(shù)據(jù)訪問層
本文主要介紹創(chuàng)建數(shù)據(jù)訪問層的具體步驟,從配置數(shù)據(jù)庫連接到插入,更新和刪除數(shù)據(jù)的具體實現(xiàn)方法,希望對大家有所幫助。2016-04-04
無法在Web服務(wù)器上啟動調(diào)試。未將項目配置為進行調(diào)試
無法在Web服務(wù)器上啟動調(diào)試。未將項目配置為進行調(diào)試...2006-10-10
在ASP.NET 2.0中操作數(shù)據(jù)之六十七:在TableAdapters中使用JOINs
使用TableAdapter向?qū)в幸欢ǖ木窒扌裕荒軇?chuàng)建出不含JOIN的存儲過程,那么本文就為大家講解,如何在TableAdapters中使用包含JOIN的存儲過程。2016-05-05
在ASP.NET 2.0中操作數(shù)據(jù)之十三:在DetailsView控件中使用TemplateField
就像在GridView中那樣,DetailsView控件也可以同樣的使用TemplateField。本文用兩個TemplateField來演示在它的使用方法。2016-05-05
解讀ASP.NET 5 & MVC6系列教程(1):ASP.NET 5簡介
這篇文章主要介紹ASP.NET 5簡介以及對各個版本號進行解釋,ASP.NET 5中新的變化,需要的朋友可以參考下。2016-06-06
NopCommerce架構(gòu)分析之(四)基于路由實現(xiàn)靈活的插件機制
本文主要介紹NopCommerce中,通過注冊路由,實現(xiàn)插件的機制,同時,NopCommerce中每個插件都集成IPlugin接口,插件擁有安裝和卸載的功能。2016-04-04


