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方法来搜索数据。一个重要的安全功能内置到了方法中。方法首先验证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 论坛是一个好地方,可以用来问您想要知道的问题。
- 基于Asp.Net MVC4 Bundle捆绑压缩技术的介绍
- 使用asp.net MVC4中的Bundle遇到的问题及解决办法分享
- ASP.NET MVC4之js css文件合并功能(3)
- ASP.NET MVC4 HtmlHelper扩展类,实现分页功能
- ASP.NET MVC4入门教程(一):入门介绍
- ASP.NET MVC4入门教程(二):添加一个控制器
- ASP.NET MVC4入门教程(三):添加一个视图
- ASP.NET MVC4入门教程(四):添加一个模型
- ASP.NET MVC4入门教程(五):从控制器访问数据模型
- ASP.NET MVC4入门教程(六):验证编辑方法和编辑视图
- ASP.NET MVC4入门教程(七):给电影表和模型添加新字段
- ASP.NET MVC4入门教程(八):给数据模型添加校验器
相关文章
在ASP.NET 2.0中操作数据之三十九:在DataList的编辑界面里添加验证控件
为了防止用户非法的输入,这节主要介绍如何在编辑数据的时候添加验证控件,以避免出现异常和保证数据的完整性。2016-05-05ASP.NET MVC Bundles 用法和说明(打包javascript和css)
本文主要介绍了ASP.NET MVC中的新功能Bundles,利用Bundles可以将javascript和css文件打包压缩,并且可以区分调试和非调试,在调试时不进行压缩,以原始方式显示出来,以方便查找问题。2016-04-04在ASP.NET 2.0中操作数据之十一:基于数据的自定义格式化
GridView, DetailsView, FormView的格式自定义可以有多种方法, 在本文中我们将用DataBound 和 RowDataBound两种事件来完成,下面主要演示了货币、加粗、斜体、高亮的数据格式化。2016-05-05ASP.NET MVC4入门教程(九):查询详细信息和删除记录
本文主要是MVC实战,介绍如何查询和删除信息,进行到这一步,您已经有一个完整的MVC案例了,创建、 读取、 更新、 删除和搜索等功能也都做了演示。2016-04-04在ASP.NET 2.0中操作数据之十三:在DetailsView控件中使用TemplateField
就像在GridView中那样,DetailsView控件也可以同样的使用TemplateField。本文用两个TemplateField来演示在它的使用方法。2016-05-05解读ASP.NET 5 & MVC6系列教程(16):自定义View视图文件查找逻辑
这篇文章主要介绍了ASP.NET 5 MVC6中自定义View视图文件查找逻辑,需要的朋友可以参考下2016-06-06在ASP.NET 2.0中操作数据之三十一:使用DataList来一行显示多条记录
ASP.NET 2.0中DataList默认情况使用单列多行的table来显示项,本文介绍通过设置RepeatColumns属性为每行的列数就可以达到显示多条记录这个目的。2016-05-05
最新评论