检查详细信息并删除方法

本教程是ASP.NET MVC 5教程介绍的一系列可视基本版本的最终版本 发布于www.asp.net网站。原创系列,由此产生 Scott Guthrie (twitter @scottgu. ), 斯科特·汉斯曼 (推特: @Shanselman. ), and 里克安德森 ( @rickandmsft. )使用C#语言编写。我的版本尽可能靠近原件,只改变编码语言。叙述文本从原始文本保持不变,并与Microsoft权限一起使用。

本教程系列将教导您使用构建ASP.NET MVC 5 Web应用程序的基础知识 Visual Studio 2013. 和Visual Basic。具有VB源代码的Web项目的Visual Studio Express可用于伴随您可以的系列 下载.

教程系列总共包括11个部分。它们使用ASP.NET MVC框架和用于数据访问的实体框架来涵盖Web开发的基础知识。它们旨在顺序顺序排列,因为每个部分都在上一节中赋予的知识。通过该系列的导航路径如下:

  1. 入门
  2. 添加控制器
  3. 添加视图
  4. 添加模型
  5. 创建连接字符串并使用SQL Server LocalDB
  6. 从控制器访问模型的数据
  7. 检查编辑方法和编辑视图
  8. 添加搜索
  9. 添加一个新字段
  10. 添加验证
  11. 检查详细信息并删除方法

11.检查详细信息并删除方法

在本教程的这一部分,您将检查自动生成的详细信息并删除方法。首先打开 电影 控制器并检查 细节 method.

详情和删除

Function 细节(ByVal id As Integer?) As ActionResult
    If IsNothing(id) 这n
        Return New HttpStatusCodeResult(HttpStatusCode.BadRequest)
    End If
    Dim movie As 电影 = db.Movies.Find(id)
    If IsNothing(movie) 这n
        Return HttpNotFound()
    End If
    Return View(movie)
End Function

创建此操作方法的MVC脚手架引擎添加了一个注释,显示了调用该方法的HTTP请求。在这种情况下,它是一个 得到 请求三个URL段,该网站 电影 controller, the 细节 method and a ID value.

代码首先使得可以轻松搜索使用的数据  方法。内置于方法中的一个重要安全功能是代码验证了  方法在代码尝试使用它之前找到了一部电影。例如,黑客可以通过更改由链接创建的URL来引入网站中的错误http:// localhost:xxxx /电影/详细信息/ 1 to something like 2345 (或某些不代表实际电影的其他值)。如果没有检查空动画,则为空动画会导致数据库错误。

检查 删除 and 删除Confirmed methods.

' GET: /Movies/Delete/5
Function 删除(ByVal id As Integer?) As ActionResult If IsNothing(id) 这n Return New HttpStatusCodeResult(HttpStatusCode.BadRequest) End If Dim movie As 电影 = db.Movies.Find(id) If IsNothing(movie) 这n Return HttpNotFound() End If Return View(movie) End Function ' POST: /Movies/Delete/5 <httppost()> <ActionName("Delete")> <ValidateAntiForgeryToken()> Function 删除Confirmed(ByVal id As Integer) As ActionResult Dim movie As 电影 = db.Movies.Find(id) db.Movies.Remove(movie) db.SaveChanges() Return RedirectToAction("Index") End Function

请注意 http获取删除 方法不删除指定的电影,它返回您可以提交的电影的视图(httppost)删除。响应于a执行删除操作 得到 请求(或者对于此事项,执行编辑操作,创建操作或更改数据)的任何其他操作打开安全漏洞。有关此信息的更多信息,请参阅Stephen Walther的博客条目 ASP.NET MVC.提示#46 - 不要使用删除链接,因为它们会创建安全漏洞.

这 httppost 删除数据的方法命名为 删除Confirmed to give the http post. 方法唯一的签名或名称。这两种方法签名如下所示:

' GET: /Movies/Delete/5
Function 删除(ByVal id As Integer?) As ActionResult

' POST: /Movies/Delete/5
<httppost()> <ActionName("Delete")> Function 删除Confirmed(ByVal id As Integer) As ActionResult

公共语言运行时(CLR)需要重载的方法具有唯一的参数签名(相同的方法名称,但参数列表)。但是,你需要两个 删除 方法 - 一个用于 得到 一个for. 邮政 - 两者都具有相同的参数签名。 (它们都需要接受一个整数作为参数。)

要分类出来,你可以做几件事。一个是给出不同名称的方法。这就是脚手架机制在前面的例子中所做的。但是,这介绍了一个小问题:ASP.NET映射URL的映射到操作方法按名称,如果重命名方法,则通常无法找到该方法。解决方案是您在示例中所看到的,这是添加的 ActionName("Delete") attribute to the 删除Confirmed 方法。这有效地对路由系统执行映射,使得包括的URL /删除/ 为一个 邮政 要求找到 删除Confirmed method.

避免具有相同名称和签名的方法的另一个常见方法是人为地改变帖子方法的签名以包括未使用的参数。例如,一些开发人员添加参数类型 FormCollection. 这是传递给的 邮政 方法,然后根本不使用参数:

Function 删除Confirmed(ByVal notUsed As FormCollection., ByVal id As Integer) As ActionResult
    Dim movie As 电影 = db.Movies.Find(id)
    If movie Is Nothing Then Return HttpNotFound()
    db.Movies.Remove(movie)
    db.SaveChanges()
    Return RedirectToAction("Index")
End Function

概括

您现在拥有一个完整的ASP.NET MVC应用程序,可以将数据存储在本地数据库数据库中。您可以创建,读取,更新,删除和搜索电影。