惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
罗磊的独立博客
腾讯CDC
云风的 BLOG
云风的 BLOG
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
U
Unit 42
I
InfoQ
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
美团技术团队
IT之家
IT之家
Stack Overflow Blog
Stack Overflow Blog
F
Fortinet All Blogs
GbyAI
GbyAI
S
SegmentFault 最新的问题

博客园 - 大浪淘沙

easyui datagrid 诡异的无法显示问题 对Repository模式误用的反思和纠正 转载 SVN中trunk,branches,tags用法详解 operamasks-ui2.0 +MVC4.0+EF5.0实战 当EntityFramework遇上Json,引爆 循环引用 这颗雷 operamasks-ui2.0 +MVC4.0+EF5.0实战之四 部门管理功能及网格控件(datagrid) operamasks-ui2.0 +MVC4.0+EF5.0实战之三 业务功能区域及标签页控件(tab) operamasks-ui2.0 +MVC4.0+EF5.0实战之二 功能菜单及树形控件(Tree) operamasks-ui2.0 +MVC4.0+EF5.0实战之一 开篇及布局控件介绍 EasyUI1.3.1+MVC4.0+EF5.0 番外篇 关于前台框架的选择 EasyUI、DWZ、ligerui EasyUI1.3.1+MVC4.0+EF5.0实战之一 开篇及布局控件介绍 Asp.Net MVC4.0 官方教程拓展之一--为模型属性增加中文显示名称 Asp.Net MVC4.0 官方教程 入门指南之九--为模型添加验证 Asp.Net MVC4.0 官方教程 入门指南之八--为Movie模型和库表添加字段 Asp.Net MVC4.0 官方教程 入门指南之七--增加搜索方法和视图 Asp.Net MVC4.0 官方教程 入门指南之六--查看Edit方法和Edit视图 Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据 Asp.Net MVC4.0 官方教程 入门指南之四--添加一个模型 Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图 Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器
Asp.Net MVC4.0 官方教程 入门指南之十--查看Detail和Delete方法
大浪淘沙 · 2012-12-10 · via 博客园 - 大浪淘沙

在这部分的教程中,您将查看自动生成的Detail方法和Delete方法。
打开Movie控制器,查看Detail方法

        public ActionResult Details(int id = 0)
        {
            Movie movie = db.Movies.Find(id);
            if (movie == null)
            {
                return HttpNotFound();
            }
            return View(movie);
        }

代码先行(Code First)使用Find方法可以很容易地找到数据。方法内置了一个重要的安全点,即在代码试图处理影片记录之前,确保Find方法找到一条影片记录。例如,黑客可以通过修改地址,由http://localhost:xxxx/Movies/Details/1 修改为 http://localhost:xxxx/Movies/Details/12345(或者其他在实际影片库中不存在的参数值),从而引发错误。如果你不检查影片是否为空,将会导致检索数据库出错。

查看Delete方法和DeleteConfirmed的方法

  //
        // 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");
        }

需要注意的是HTTP GET Delete方法不删除指定的影片,它返回一个Movie的视图,您可以执行(HttpPost)删除方法来完成删除操作。在一个GET请求的响应(对于这个问题,执行编辑操作,创建操作,或任何其他更改数据的操作)执行删除操作,带来了一个安全漏洞。欲了解更多信息,请参阅斯蒂芬•瓦尔特的的博客条目ASP.NET MVC Tip #46 — Don't use Delete Links because they create Security Holes(不要使用删除链接,因为它们会导致安全漏洞)。

删除数据的HttpPost方法,被命名为DeleteConfirmed。
公共语言运行库(CLR)需要重载方法有一个独特的签名(相同的方法名,但不同的参数列表)。然而,在这里,你需要删除方法GET和POST 都具有相同的签名。它们都需要接受一个整数作为参数。
为了解决该问题,有几种方法可以选择。其中一种方法是,赋予方法不同的名称。这就是脚手架机制在前面的例子所做的事情。然而,这引入了一个小问题:ASP.NET映射url各部分来执行方法,如果你重命名一个方法,路由通常将无法找到该方法。解决的办法就是你看到的例子中所做的,即为DeleteConfirmed方法添加ActionName("Delete")属性。这将影响到路由系统,包含/ Delete / URL的 POST请求会调用DeleteConfirmed的方法。
避免具有相同的名称和签名的方法发生问题,另一种常见的方式是人为地改变Post方法的签名,使其包含未使用的参数。例如,一些开发人员的增加传递给Post方法类型为FormCollectionPOST的参数而不使用该参数:

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

结束语
现在您拥有了一个将数据存储在本地DB数据库的完整的ASP.NET MVC应用程序。您可以创建,读取,更新,删除和搜索电影。

译者注:原文整个教程已翻译完毕,第一次做翻译工作,不足之处望大家多多包含。翻译过程比较仓促,十篇文章完成后,从头到尾进行了一遍校对,增加目录和索引,改正了错别字,并把一些别扭的直译修改为意译。下一步的计划,在这个例子的基础上,进一步深入摸索和研究。


本教程所有文章导航

本系列共10篇文章,翻译自Asp.Net MVC4 官方教程,由于本系列文章言简意赅,篇幅适中,从一个示例开始讲解,全文最终完成了一个管理影片的小系统,非常适合新手入门Asp.Net MVC4,并由此开始开发工作。

原文供9篇文章,译者将其中第6篇拆成了2篇

1. Asp.Net MVC4 入门介绍

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/03/2800210.html

2. 添加一个控制器

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-controller

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/04/2801949.html

3. 添加一个视图

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-view

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/04/2801988.html

4. 添加一个模型

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-model

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/05/2803012.html

5. 从控制器访问数据模型

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/accessing-your-models-data-from-a-controller

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/05/2803429.html

6. 查看Edit方法和Edit视图

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-edit-methods-and-edit-view

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/05/2804100.html

       http://www.cnblogs.com/seawaving/archive/2012/12/06/2804590.html

7. 为Movie模型和库表添加字段

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-new-field-to-the-movie-model-and-table

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/06/2805401.html

8. 为模型添加验证

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-validation-to-the-model

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/06/2806322.html

9. 查看Detail和Delete方法

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-details-and-delete-methods

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/10/2811064.html