ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解

原文 ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解

在教程的这一部分,我们将研究一下自动生成的 Details 和Delete 方法。

Details 方法

打开Movie控制器,找到Details方法。

//
// GET: /Movies/Details/5
public ActionResult Details(Int32 id)
{Movie movie = db.Movies.Find(id);if (movie == null){return HttpNotFound();}return View(movie);
}

Code First 通过使用Find方法找到要显示的Movie对象。如果movie对象为null,则返回HttpNotFound(),这个判断非常有必要,试想如果有黑客要攻击你的网站,他们可能将通过修改URL来尝试访问你的网站,例如将http://localhost:xxxx/Movies/Details/1 修改为http://localhost:xxxx/Movies/Details/12345 。如果你不去验证movie是否为空,则会将数据库错误返回给黑客,这样会暴漏网站的更多信息。

Delete 和 DeleteConfirm 方法

//
// GET: /Movies/Delete/5
public ActionResult Delete(Int32 id)
{Movie movie = db.Movies.Find(id);if (movie == null){return HttpNotFound();}return View(movie);
}//
// POST: /Movies/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(Int32 id)
{Movie movie = db.Movies.Find(id);db.Movies.Remove(movie);db.SaveChanges();return RedirectToAction("Index");
}

第一个Delete方法并没有删除Movie,而是返回了可以删除确认页面,在确认页面中,会创建HttpPost请求,完成Movie的删除。直接使用HttpGet 请求来删除Movie会打开一个安全漏洞。

真正删除数据的方法名字是 DeleteConfirmed。下面是两个方法的定义:

public ActionResult Delete(Int32 id)[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(Int32 id)

CLR对于重构的方法,要求方法名相同,但参数不同。然而,我们在这里用到的两个删除方法,他们都接收一个整形的参数,如果方法名也形同,那么就构成语法错误了。

为了解决这个问题,有以下几种解决办法:

第一种办法是使用不同的方法名。这也是ASP.NET MVC 5 支架所采用的方法。然而,使用这种方法还有一些小问题:ASP.NET 通过地址段来映射方法名,如果将方法重命名,路由通常会找不到方法,解决的办法已经在上面的例子中了,我们可以为DeleteConfirmed方法添加 特性ActionName("Delete")。这样一来,当URL中包含Delete 的POST请求都会被分配给方法DeleteConfirmed。

另外一种常用解决的方法是使用相同的名字,然后为POST 方法添加一个未使用的参数。例如,一些开发者会添加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 5 应用程序,你可以使用LocalDB来存储数据,可以新建、编辑、查找、删除 Movie数据。本教程就介绍到这里,起飞网将继续翻译更多ASP.NET MVC 教程及其它技术文章,期待您的关注!

posted on 2013-12-10 21:08 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/3468190.html

ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解相关推荐

  1. ASP.NET MVC 5 学习教程:添加控制器

    ASP.NET MVC 5 学习教程:添加控制器 原文 ASP.NET MVC 5 学习教程:添加控制器 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控 ...

  2. ASP.NET MVC 5 学习教程:控制器传递数据给视图

    起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控制器访问模型的数据 生成的代码详解 使用 SQL Se ...

  3. ASP.NET MVC 5 学习教程:修改视图和布局页

    ASP.NET MVC 5 学习教程:修改视图和布局页 原文 ASP.NET MVC 5 学习教程:修改视图和布局页 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图 ...

  4. ASP.NET MVC 5 学习教程:添加查询

    起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控制器访问模型的数据 生成的代码详解 使用 SQL Se ...

  5. iis7 php安装教程,iis7 php安装方法详解

    iis7 php安装的方法:首先安装IIS7:然后下载PHP Manager并安装:接着下载需要的PHP版本,并解压安装:最后选择一个用于检查PHP环境的站点,检查PHP是否安装成功即可. 本教程操作 ...

  6. 【迷你兔教程】硬盘数据恢复方法详解

    现在的硬盘内存通常较大,如果丢失数据的话动辄就是上百个G,如何才能轻松不费力地恢复硬盘数据,我们来具体操作一下. 准备工具:硬盘,迷你兔数据恢复工具 操作步骤如下: 1.打开迷你兔数据恢复工具,选择[ ...

  7. ASP.NET MVC Music Store教程(1):概述和新项目

    ASP.NET MVC Music Store教程(1):概述和新项目 转自 http://firechun.blog.163.com/blog/static/31804522201102709374 ...

  8. ASP.NET MVC Music Store教程(2):控制器

    ASP.NET MVC Music Store教程(2):控制器 转自http://firechun.blog.163.com/blog/static/3180452220110272197830/ ...

  9. ASP.NET MVC 2 学习笔记二: 表单的灵活提交

    ASP.NET MVC 2 学习笔记二:  表单的灵活提交 前面说到有做到公司内部的一个请假系统,用的是ASP.NET MVC 2+Entity Framework.虽然EF(Entity Frame ...

最新文章

  1. 高性能NoSql数据库 SSDB
  2. Linux下得到显示屏参数的方法
  3. js获取微信状态栏高度_人人商城打包app教程 方法 hbuilder打包支持支付宝微信原生支付...
  4. OpenCV图像处理——修复失焦模糊的图像
  5. java arraystoreexception_208道高频 Java面试题答案6
  6. Groovy 1.5.7 出现java.lang.LinkageError问题
  7. Linux(一) 概述 、 系统安装与分区
  8. C++ 带默认参数值的函数
  9. java实现人脸识别源码【含测试效果图】——Dao层(BaseDao)
  10. C语言项目:推箱子大战
  11. WindowsXP命令行修改服务启动选项
  12. Java面试题16 牛客 以下java程序代码,执行后的结果是()
  13. linux下RTNETLINK answers: File exists的解决方案
  14. js排序算法详解-归并排序
  15. excel能创建html吗,如何通过Excel电子表格使用循环创建单独的HTML发布页面
  16. 安装 | MATLAB2020a (64位) 安装教程及安装包下载链接
  17. Ubuntu 10.04 安装 RTX 2009
  18. WDS桥接和WDS中继的区别
  19. CNCC 2022| 隐私计算:理论、技术、应用与未来
  20. IOI2015部分题解

热门文章

  1. 【Linux】Linux中at命令详解
  2. java结束全部操作代码_Java基本的线程操作(附代码)
  3. 每天一道LeetCode-----n皇后问题
  4. 记录kubesphere的安装与使用
  5. 迅雷启动不了,提示Atl71.dll文件丢失
  6. 使用vim寄存器(reg)功能(vim 复制、剪切、粘贴功能简介)
  7. [译] ROS C++ 代码规范
  8. notepad比对文本_仵航说 notepad++怎么对比文件 仵老大
  9. 扩容是元素还是数组_348,数据结构1,数组
  10. 从struts2拦截器到自定义拦截器