💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
在本教程中,您将查看自动生成的`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](http://stephenwalther.com/blog/archive/2009/01/21/asp.net-mvc-tip-46-ndash-donrsquot-use-delete-links-because.aspx). 将删除数据的`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](http://msdn.microsoft.com/en-us/library/system.web.mvc.formcollection.aspx)`,`[FormCollection](http://msdn.microsoft.com/en-us/library/system.web.mvc.formcollection.aspx)`是会传递给 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 数据库中存储数据。您可以创建、 读取、 更新、 删除和搜索电影。 [![clip_image001](https://box.kancloud.cn/2016-08-08_57a8559d609a5.png "clip_image001")](http://images.cnitblog.com/blog/139239/201303/07143311-3778107dae3147e49cf3cbc2d4bda47c.png) 如果您想要部署应用程序,最好先在您本地的IIS 7 服务器上测试一下您的应用程序。您可以使用此[Web Platform Installer](http://www.microsoft.com/web/gallery/install.aspx?appsxml=&appid=ASPNET;) 链接启用IIS服务器的 ASP.NET 应用程序的设置。请参阅下面的部署链接: · [Test your ASP.NET MVC or WebForms Application on IIS 7 in 30 seconds](http://blogs.msdn.com/b/rickandy/archive/2011/04/22/test-you-asp-net-mvc-or-webforms-application-on-iis-7-in-30-seconds.aspx) · [ASP.NET Deployment Content Map](http://msdn.microsoft.com/en-us/library/dd394698.aspx) · [Enabling IIS 7.x](http://blogs.msdn.com/b/rickandy/archive/2011/03/14/enabling-iis-7-x-on-windows-7-vista-sp1-windows-2008-windows-2008-r2.aspx) · [Web Application Projects Deployment](http://msdn.microsoft.com/en-us/library/dd394698.aspx) 现在鼓励您开始学习中级内容 [Creating an Entity Framework Data Model for an ASP.NET MVC Application](http://www.asp.net/entity-framework/tutorials/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application) 和 [MVC Music Store](http://www.asp.net/mvc/tutorials/mvc-music-store-part-1) 教程, 浏览[ASP.NET articles on MSDN](http://msdn.microsoft.com/en-us/library/gg416514(VS.98).aspx),的文章,再看看很多的视频和资源:[http://asp.net/mvc](http://asp.net/mvc)来了解更多关于 ASP.NET MVC 的信息 ! [ASP.NET MVC forums](http://forums.asp.net/1146.aspx) 论坛是一个好地方,可以用来问您想要知道的问题。 ----------------------------------------------------------------------------------------------------------------------------------------------- 译者注: 本系列共9篇文章,翻译自Asp.Net MVC4 官方教程,由于本系列文章言简意赅,篇幅适中,从一个示例开始讲解,全文最终完成了一个管理影片的小系统,非常适合新手入门Asp.Net MVC4,并由此开始开发工作。9篇文章为: 1. Asp.Net MVC4 入门介绍 · 原文地址:[http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4](http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4) · 译文地址:[http://www.cnblogs.com/powertoolsteam/archive/2012/11/01/2749906.html](http://www.cnblogs.com/powertoolsteam/archive/2012/11/01/2749906.html) 2. 添加一个控制器 · 原文地址:[http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-controller](http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-controller) · 译文地址:[http://www.cnblogs.com/powertoolsteam/archive/2012/11/02/2751015.html](http://www.cnblogs.com/powertoolsteam/archive/2012/11/02/2751015.html) 3. 添加一个视图 · 原文地址:[http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-view](http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-view) · 译文地址:[http://www.cnblogs.com/powertoolsteam/archive/2012/11/06/2756711.html](http://www.cnblogs.com/powertoolsteam/archive/2012/11/06/2756711.html) 4. 添加一个模型 · 原文地址:[http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-model](http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-model) · 译文地址:[http://www.cnblogs.com/powertoolsteam/archive/2012/12/17/2821495.html](http://www.cnblogs.com/powertoolsteam/archive/2012/12/17/2821495.html) 5. 从控制器访问数据模型 · 原文地址:[http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/accessing-your-models-data-from-a-controller](http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/accessing-your-models-data-from-a-controller) · 译文地址:[http://www.cnblogs.com/powertoolsteam/archive/2013/01/11/2855935.html](http://www.cnblogs.com/powertoolsteam/archive/2013/01/11/2855935.html) 6. 验证编辑方法和编辑视图 · 原文地址:[http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-edit-methods-and-edit-view](http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-edit-methods-and-edit-view) · 译文地址:[http://www.cnblogs.com/powertoolsteam/archive/2013/01/24/2874622.html](http://www.cnblogs.com/powertoolsteam/archive/2013/01/24/2874622.html) 7. 给电影表和模型添加新字段 · 原文地址:[http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-new-field-to-the-movie-model-and-table](http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-new-field-to-the-movie-model-and-table) · 译文地址:[http://www.cnblogs.com/powertoolsteam/archive/2013/02/26/2933105.html](http://www.cnblogs.com/powertoolsteam/archive/2013/02/26/2933105.html) 8. 给数据模型添加校验器 · 原文地址:[http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-validation-to-the-model](http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-validation-to-the-model) · 译文地址:[http://www.cnblogs.com/powertoolsteam/archive/2013/03/05/2944030.html ](http://www.cnblogs.com/powertoolsteam/archive/2013/03/05/2944030.html%20) 9. 查询详细信息和删除记录 · 原文地址:[http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-details-and-delete-methods](http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-details-and-delete-methods) · 译文地址:[http://www.cnblogs.com/powertoolsteam/archive/2013/03/07/2948000.html](http://www.cnblogs.com/powertoolsteam/archive/2013/03/07/2948000.html)