ASP.NET MVC 学习8、Controller中的Detail和Delete方法
2014-03-20 14:17
567 查看
参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-details-and-delete-methods
我们再来看看自动生成的Details 和Delete methods.
MoviesController中的Details方法:
public ActionResult Details(int? id) { if (id == null) { return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest); } Movie movie = db.Movies.Find(id); if (movie == null) { return HttpNotFound(); } return View(movie); }
MVC架构引擎(scaffolding engine)创建的action method会在HTTP请求的时候被调用。上面的这个方法在GET请求的时候被调用,URL中会包含三个参数(segments):Movies Controller,Details Method,ID Value.
Code First 用Find Method把搜索变得更加简单。Detail方法中包含一个很重要的安全特性:在没有找到具体的movie实例前,代码不会进行任何的处理。
例如,如果hacker直接在把浏览器的地址直接由 http://localhost:xxxx/Movies/Details/1更改为http://localhost:xxxx/Movies/Details/1234 这个如果没有检查ID对应的Movie实例是否存在,页面就会报出一个database error
MoviesController中的Delete和DeleteConfirme方法:
// // 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) { Movie movie = db.Movies.Find(id); db.Movies.Remove(movie); db.SaveChanges(); return RedirectToAction("Index"); }
我们之前也有讲到过的,如果ActionResult Method 前不加前缀就默认为GET请求执行的方法,这个方法不会更新数据库的数据,只是返回所查询的数据。我们点击“Delete”连接的时候(http://localhost:9898/movies/Delete/1),会调用Delete方法查询到对应Id的数据,然后反馈到页面中。我们再次点击下面的Delete按钮就会提交一个HTTP POST请求,调用ActionDelete方法。
我们现在看一下,Delete方法和DeleteConfirm方法的区别:
CLR(common language runtime)请求加载方法的时候,会根据唯一的(unique)方法名和参数调用相应的方法。但是在这里,我们需要两个Delete methods,一个处理GET请求一个处理POST请求,这两个方法又有相同的参数。
为了这两个Delete方法区分开来,一个解决方法是给这两个方法不同的名字,把POST请求需要调用的Delete方法重新命名为DeleteConfirme.但是这样的话,更具默认路由,Delete的URL(http://localhost:9898/movies/Delete/1)请求也就只能调用GET 的 Delete Method,无法调用重命名的DeleteConfrime Method。为了解决这个问题,我们只需要在DeleteConfirme前加上
ActionName("Delete")attribute就可以了。
小总结:
上面的这些我们已经建立了一个简单的CRUD的MVC Application。下一步我们应该把这个网址发布。Microsoft 给我们免费的web hosting 可以挂10个websites.
地址:free Windows Azure trial account.
相关文章推荐
- ASP.NET MVC 入门 (十)——查看Detail 和Delete 方法
- ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解
- ASP.NET MVC学习笔记-Controller与View传值
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
- 从零开始学习 ASP.NET MVC 1.0 (三) Controller/Action 深入解析与应用实例
- [转]ASP.NET MVC 5 - 查询Details和Delete方法
- ASP.NET实现MVC中获取当前URL、controller及action的方法
- ASP.NET MVC 5 学习教程:Edit方法和Edit视图详解
- 【ASP.NET MVC 学习笔记】- 11 Controller和Action(2)
- 从零开始学习 ASP.NET MVC 1.0 (三) Controller/Action 深入解析与应用实例
- ASP.NET MVC 学习1、新增Controller,了解MVC运行机制
- asp.net mvc 动态编译生成Controller的方法
- asp.net mvc的Routing、Controller、Filter学习笔记
- ASP.NET MVC学习笔记-Controller与View传值
- 【译】ASP.NET MVC 5 教程 - 11:Details 和 Delete 方法详解
- ASP.NET MVC学习笔记-Controller的ActionResult
- ASP.NET MVC学习笔记-Controller与View传值
- Asp.net Mvc 的积木,谈Asp.net MVC中视图逻辑模块化和controller组件的使用方法
- ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法
- ASP.NET MVC 5 - 查询Details和Delete方法