转自:http://www.cnblogs.com/powertoolsteam/p/3656203.html

ASP.NET MVC 5 - 查询Details和Delete方法

 

在这部分教程中,接下来我们将讨论自动生成的Details和Delete方法。

查询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 scaffolding引擎增加了一个注释表明,在调用的HTTP请求方法中,GET请求有三个URL段,Movies控制器,Details方法和ID值。

Code First 使得您可以轻松的使用Find方法来搜索数据。一个重要的安全功能内置到了方法中。方法首先验证Find方法已经找到了一部电影,然后再执行其它代码。例如,黑客可以通过更改http://localhost:xxxx/Movies/Details/1http://localhost:xxxx/Movies/Details/12345 (或某些其它值,不代表实际影片的值)从而使得链接URL 出现错误。如果您没有检测是否找到了Movie, null Movie会导致出现数据错误。

查看DeleteDeleteConfirmed方法。

// GET: /Movies/Delete/5

public 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");

}

请注意,DeleteHTTP Get 方法不会删除指定的电影,它返回删除电影的视图,您可以在此视图中提交 (HttpPost) 删除电影。如果使用GET 请求执行删除操作(或者执行编辑操作,创建操作或者更改数据的任何其它操作) 开辟了一个安全漏洞。对此的详细信息,请参阅斯蒂芬 · 瓦尔特的博客ASP.NET MVC Tip #46 — Don't use Delete Links because they create Security Holes.

将删除数据的HttpPost方法命名为唯一签名或名称的 DeleteConfirmed 方法。这两个方法的签名如下所示:

// GET: /Movies/Delete/5

public ActionResult Delete(int? id)

//

// POST: /Movies/Delete/5

[HttpPost, ActionName("Delete")]

public ActionResult DeleteConfirmed(int id)

公共语言运行时 (CLR)重载方法时,需要方法具有独特唯一的签名 (方法名称相同但不同的参数列表)。但是,在这里您需要两种删除方法 — — 一个 GET方法和一个POST方法它们都具有相同的签名。(他们都需要接受一个整数作为参数)。

要解决这一点,可以有几种办法。一是使用不同的方法名称。这是框架代码在前面的示例中所使用的方法。然而,这就带来了一个小问题: ASP.NET 将部分的 URL按名称映射到操作方法,如果您重命名了方法,通常Routing将无法找到该方法。解决方法是您在示例中看到的,将ActionName("Delete")属性添加到DeleteConfirmed 方法。这会有效的执行Routing系统的Url映射,这样一个包含/Delete/的 POST 请求的URL 将找到DeleteConfirmed 方法。

另一个常见的方法,来避免具有相同名称和签名的方法,是人为地改变POST 方法,包括未使用参数的签名。例如,有些开发人员添加参数类型 FormCollectionFormCollection是会传递给 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主机。 如通过微软的free Windows Azure trial account,您可以部署多达10个Web站点。我建议你​​下一步请按照我的教程Deploy a Secure ASP.NET MVC app with Membership, OAuth, and SQL Database to a Windows Azure Web Site,以更深入了解如何部署。另外,还有一个很好的教程是Tom Dykstra's的中级的Creating an Entity Framework Data Model for an ASP.NET MVC Application. StackoverflowASP.NET MVC forums

提出问题的好地方:StackOverflow的ASP.NET MVC的论坛或者GCDN的Web软件开发讨论区。请关注我们的博客,这样你就可以获得最新教程的更新信息流。

任何意见,欢迎反馈。

-----------------------------------------------------------------------------------------

《ASP.NET MVC 5 入门指南》12篇文章汇总如下:

1. ASP.NET MVC 5 - 开始MVC 5之旅

2. ASP.NET MVC 5 - 控制器

3. ASP.NET MVC 5 - 视图

4. ASP.NET MVC 5 - 将数据从控制器传递给视图

5. ASP.NET MVC 5 - 添加一个模型

6. ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB

7. ASP.NET MVC 5 - 从控制器访问数据模型

8. ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)

9. ASP.NET MVC 5 - 给电影表和模型添加新字段

10. ASP.NET MVC 5 - 给数据模型添加校验器

11. ASP.NET MVC 5 - 查询Details和Delete方法

12. ASP.NET MVC 5 - 使用Wijmo MVC 5模板1分钟创建应用

希望这些文章对感兴趣的朋友有所帮助,另附上PDF版的汇总文档:

ASP.NET MVC 5 入门指南》PDF版

mvc5经典教程再补充。。的更多相关文章

  1. WEKA使用教程(经典教程转载)

    http://blog.csdn.net/yangliuy/article/details/7589306 WEKA使用教程(经典教程转载) 标签: lift算法csv数据挖掘class任务 2012 ...

  2. 转 Kafka入门经典教程

    Kafka入门经典教程 http://www.aboutyun.com/thread-12882-1-1.html 问题导读 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic. ...

  3. 转载 CSS3 经典教程系列:CSS3 盒阴影(box-shadow)详解

    目标大纲 文章转载 CSS3 经典教程系列:CSS3 盒阴影(box-shadow)详解 IE中CSS-filter滤镜小知识大全 CSS实现跨浏览器兼容性的盒阴影效果

  4. Android扫盲教程大全经典教程全分享

    Android扫盲教程大全经典教程全分享,相当于android的简单用户手册下载路径 Android扫盲教程大全经典教程全分享.rar

  5. 《Hey程序员 你适合加入创业公司吗?》再补充

    笔者经过多年的走访发现,不是所有优秀的程序员都能在创业公司如鱼得水.根据笔者的经验,具备下面几点优秀品质的程序员会更容易适应创业公司的环境. 1.娴熟的调试技巧可以说,程序员的大部分时间都花在调试程序 ...

  6. 在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程

    http://jijiaa12345.iteye.com/blog/1739754 在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程 本文是一篇在Myeclipse下构建Jav ...

  7. SQL Server 2005 盛宴系列 经典教程

    SQL Server 2005 盛宴系列 经典教程  [复制链接]   发表于 2007-3-27 14:08 | 来自 51CTO网页 [只看他] 楼主     TECHNET  SQL serve ...

  8. [转载]HTML5开发入门经典教程和案例合集(含视频教程)

    http://www.iteye.com/topic/1132555 HTML5作为下一代网页语言,对Web开发者而言,是一门必修课.本文档收集了多个HTML5经典技术文档(HTML5入门资料.经典) ...

  9. Unity3.x游戏开发经典教程 书例 100%完毕~

    大家都公布自己的作品,作为一个新人,我也发点什么.刚刚做完了Unity3.x游戏开发经典教程书例不久,假如有同学想学这本书入门U3D,我的作品也能让新人參考一下...脚本都是C#写的.以下附上链接~ ...

随机推荐

  1. 通过注册表查找oracle_home的位置

    运行regedit进入注册表 ctrl+f查找oracle_home

  2. JAVA CAS单点登录(SSO) 教程

    一.教程前言 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤 单点登录(SSO):请看百科解释猛击这里打开 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Auth ...

  3. 在WIN32 DLL中使用MFC

    最近用WIN32 DLL,为了方便要用到MFC的一些库,又不想转工程,就网上找了很多方法,发现没有详细的介绍,有的也行不通,现在成功在WIN32 DLL中使用了MFC,记录一下以防以后用到忘记 一.修 ...

  4. 玩转redis

    http://www.cnblogs.com/huangxincheng/p/5002794.html

  5. 函数可重入问题reentrant functions(函数执行过程中可以被中断,允许多个副本)

    最近经常听到这个名词,以前也听到过,不过接触更多的是“线程安全问题”,而且本人也一直理解的是两个名字的含义是一样的.今天仔细总结一下这个名词相关的概念. 引用博文:可重入函数和不可重入函数 (http ...

  6. inflate方法与findViewById的区别

    LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来找 re ...

  7. vimrc for mac

    " Configuration file for vim set modelines=0 " CVE-2007-2438 " Normally we use vim-ex ...

  8. python-append()方法

    append() 方法向列表的尾部添加一个新的元素.只接受一个参数. >>> mylist = [1,2,3,4] >>> mylist [1, 2, 3, 4] ...

  9. 编码识别工具:hash-identifier

    hash-identifier的使用: 当不知道编码是什么类型的时候,可以通过kali系统中的hash工具判别,如下图所示, 在HASH后面输入要判别的编码内容,在后面的Possible Hashs中 ...

  10. How to download a website for offline usage

    wget -U Mozilla --recursive --no-clobber --page-requisites --html-extension --convert-links -- restr ...