ASP.NET MVC 学习8、Controller中的Detail和Delete方法
我们再来看看自动生成的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 学习8、Controller中的Detail和Delete方法的更多相关文章
- 【转】ASP.NET MVC学习笔记-Controller的ActionResult
1. 返回ViewResult public ActionResult Index() { ViewData["Message"] = "Welcome ...
- ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则
ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...
- 【ASP.NET MVC 学习笔记】- 11 Controller和Action(2)
本文参考:http://www.cnblogs.com/willick/p/3331513.html 1.MVC一个请求的发出至action返回结果的流程图如下: 重点是Controller Fact ...
- ASP.NET MVC学习之Ajax(完结)
一.前言 通过上面的一番学习,大家一定收获不少.但是总归会有一个结束的时候,但是这个结束也意味着新的开始. 如果你是从事ASP.NET开发,并且也使用了第三方控件,那么一定会觉得ASP.NET开发aj ...
- ASP.NET MVC学习之过滤器篇(2)
下面我们继续之前的ASP.NET MVC学习之过滤器篇(1)进行学习. 3.动作过滤器 顾名思义,这个过滤器就是在动作方法调用前与调用后响应的.我们可以在调用前更改实际调用的动作,也可以在动作调用完成 ...
- ASP.NET MVC学习之控制器篇
一.前言 许久之后终于可以继续我的ASP.NET MVC连载了,之前我们全面的讲述了路由相关的知识,下面我们将开始控制器和动作的讲解. ASP.NET MVC学习之路由篇幅(1) ASP.NET MV ...
- ASP.NET MVC学习系列(二)-WebAPI请求
继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现 ...
- ASP.NET MVC学习系列(二)-WebAPI请求(转)
转自:http://www.cnblogs.com/babycool/p/3922738.html 继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的g ...
- ASP.NET MVC学习之控制器篇(二)
原文链接:http://www.asp.net/learn/mvc/ 这篇教程探索了ASP.NET MVC控制器(controller).控制器动作(controller action)和动作结果(a ...
随机推荐
- UML: CIM & PIM
CIM-1:定义业务流程 定义及分析业务流程(Business Process)是为了尽快理清系统范围,以便估算开发成本及时间,可不是为了要改造业务流程.系统分析员千万别误解了此步骤的目的.所以,系统 ...
- Linux GPT分区
parted /dev/sdb //parted sdb磁盘 mklabel gpt //设置该磁盘分区为gpt mkpart primary 0% 100% //划分分区大 ...
- BitNami一键安装Redmine(转)
1. 简介 对于一个新手,如果严格按照官方文档来安装redmine,我想会“疯”掉的.有没有一种简便的方法.有滴,那就是BitNami. BitNami提供redmine的一键安装程序,简单.易用.方 ...
- Ajax出入江湖
window.onload = initAll; var xhr = false; function initAll() { if (window.XMLHttpRequest) { xhr = ne ...
- 跨线程调用控件之MethodInvoker
原文:http://www.cnblogs.com/cm8448940/archive/2008/07/10/1240045.html 使用到两个控件,一个按钮button1,一个标签label1. ...
- C/C++框架和库
http://blog.csdn.net/xiaoxiaoyeyaya/article/details/42541419 值得学习的C语言开源项目 - 1. Webbench Webbench是一个在 ...
- Asp.net 身份验证
Forms 验证方式对基于用户的验证授权提供了很好的支持,可以通过一个登录页面验证用户的身份,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个 web应用就会连同这个身份Cookie一起 ...
- WAF安恒
http://wenku.baidu.com/view/c242927f581b6bd97e19ea1a.html?from=search
- IOS 中的MVC设计模式
- [SQL Server系] -- 视图
1:定义 从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据. 从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表. 从数据库系统内部来看,视图是由一张或多张表中的数 ...