ASP.NET MVC 5 - 查询Details和Delete方法
来源:互联网 发布:ico图标制作软件 编辑:程序博客网 时间:2024/04/28 15:59
在本教程的这一部分,您会检查自动生成的Details
和Delete
方法。
检查详细信息和删除方法
打开Movie
控制器并检查的Details
的方法。
public ActionResult Details(int? id){ if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Movie movie = db.Movies.Find(id); if (movie == null) { return HttpNotFound(); } return View(movie);}
创建此操作方法的 MVC 脚手架引擎添加注释显示一个调用方法的 HTTP 请求。在这种情况下,它是与三个 URL 部分、Movies
控制器、Details
方法和一个ID
值的GET
请求。
代码首先容易地搜索数据使用 Find
方法。重要的安全功能,内置的方法是代码验证, Find
方法发现了一部电影,代码试图做什么以它之前。例如,黑客还可以通过更改由从http://localhost:xxxx/电影/细节/1到的东西像http://localhost:xxxx/电影/细节/12345 (或一些其他的值,并不代表实际的电影) 的链接的 URL 错误引入到站点中。如果你不做检查 null 的电影,一个空的电影会导致数据库错误。
检查Delete
和DeleteConfirmed
方法。
// GET: /Movies/Delete/5public ActionResult Delete(int? id){ if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } 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(int id){ Movie movie = db.Movies.Find(id); db.Movies.Remove(movie); db.SaveChanges(); return RedirectToAction("Index");}
请注意, HTTP Get
Delete
方法并不删除指定的电影,它返回一个视图的电影,你可以提交 (HttpPost
) 删除。执行删除操作响应 GET 请求 (或对于这一问题,需要执行的编辑操作,创建操作或更改数据的任何其他操作) 开辟了一个安全漏洞。有关详细信息,请参阅斯蒂芬 · 瓦尔特博客ASP.NET MVC 提示 #46 — — 不使用删除链接,因为它们创建安全漏洞.
将删除数据的HttpPost
方法被命名为 DeleteConfirmed
,给出了 HTTP POST 方法独特签名或名称。两个方法签名如下所示︰
// GET: /Movies/Delete/5public ActionResult Delete(int? id)//// POST: /Movies/Delete/5[HttpPost, ActionName("Delete")]public ActionResult DeleteConfirmed(int id)
公共语言运行时 (CLR) 需要重载的方法,具有独特的参数签名 (方法名称相同但不同的参数列表)。然而,在这里你需要两个都具有相同的参数签名的删除方法 — — 一个得到 — — 和一个职位。(他们都需要接受一个整数作为参数)。
若要排序这一点,你可以做几件事情。一个是给出了方法不同的名称。这是基架机制在前面的示例中做了什么。然而,这介绍了一个小问题︰ ASP.NET 将线段的 URL 映射到操作方法的名字,和如果你重命名的方法,通常路由将无法找到该方法。解决方案是您在示例中,将ActionName("Delete")
属性添加到DeleteConfirmed
方法就是看到了什么。这有效地执行映射路由系统这样一个包含/Delete/的 POST 请求 URL 将找到的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 应用程序将数据存储在本地的 DB 数据库。你可以创建、 读取、 更新、 删除和搜索电影。
接下来的步骤
已经建立和测试 web 应用程序之后下, 一步是将它提供给其他人使用互联网。要做到这一点,必须将其部署到 web 宿主提供程序。Microsoft 提供了免费的虚拟主机中蔚蓝试用帐号的达 10 web 站点。我建议你下一步按照我的教程会员、 OAuth,与 SQL Azure 数据库安全的 ASP.NET MVC 应用程序部署。优秀的教程是汤姆戴克斯特中间级创建 ASP.NET MVC 应用程序中的实体框架数据模型。计算器和ASP.NET MVC 论坛是一个伟大的地方问问题。跟着我在 twitter 上,所以你可以在我最新的教程上的更新。
反馈是欢迎的。
— —里克 · 安德森twitter: @RickAndMSFT
— —斯科特静态twitter: @shanselman
-----------------------------------------------------------------------------------------
《ASP.NET MVC 5 入门指南》12篇文章汇总如下:
1. ASP.NET MVC 5 - 入门
2. ASP.NET MVC 5 - 控制器
3. ASP.NET MVC 5 - 视图
4. ASP.NET MVC 5 - 添加一个模型
5. ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB
6. ASP.NET MVC 5 - 从控制器访问数据模型
7. ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)
8. ASP.NET MVC 5 - 将数据从控制器传递给视图
9. ASP.NET MVC 5 - 添加搜索
10. ASP.NET MVC 5 - 给电影表和模型添加新字段
11. ASP.NET MVC 5 - 给数据模型添加校验器
12. ASP.NET MVC 5 - 查询Details和Delete方法
希望这些文章对感兴趣的朋友有所帮助
- ASP.NET MVC 5 - 查询Details和Delete方法
- ASP.NET MVC 5 - 查询Details和Delete方法
- ASP.NET MVC 5 - 查询Details和Delete方法
- ASP.NET MVC 3 (Implementing Edit, Details, and Delete Views)
- 改善Details和Delete方法(ASP.NET MVC3系列文章九)
- 学习ASP .NET MVC5官方教程总结(十一)Details 和 Delete 方法详解
- APS.NET_MVC5学习笔记- 查询Details和Delete方法
- ASP.NET MVC 3 (Implementing Edit, Details, and Delete Views) (9/9)
- ASP.NET MVC 3 (Implementing Edit, Details, and Delete Views) (9/9)
- ASP.NET MVC 入门 (十)——查看Detail 和Delete 方法
- ASP.NET MVC的常用数据库查询和提取模式
- Asp.Net MVC扩展方法
- 浅谈 C++ 中的 new/delete 和 new[]/delete[]http://blog.csdn.net/hazir/article/details/21413833
- asp.net mvc源码分析-BeginForm方法 和ClientValidationEnabled 属性
- ASP.NET和ASP.NET MVC比较
- ASP.NET MVC - how to make users confirm the delete
- ASP.NET MVC 5
- ASP.NET MVC 5
- linux ssh 到远程服务器执行命令和crontab中执行命令提示命令找不到的问题
- HTTP与HTTPS的区别
- 网宿MyBatis分页问题总结
- Nrf51xxx Bluetooth Related
- listView自定义分页加载
- ASP.NET MVC 5 - 查询Details和Delete方法
- Java中为什么反对使用Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit?
- IFIX调度 驱动启动 停止(使用FDS方式)
- 读写文件常用功能
- SageApp
- listview 保存当前位置,跳转其他页面,返回时显示当前Item
- LeetCode 231. Power of Two 解题报告
- java多线程之Future和FutureTask
- SpringMVC接收页面表单参数