学习ASP .NET MVC5官方教程总结(十一)Details 和 Delete 方法详解

学习ASP .NET MVC5官方教程总结(十一)Details 和 Delete 方法详解

在这一章,我们将研究一下自动生成的 Details 和Delete 方法。

打开Movie控制器,找到Details方法。

//
// GET: /Movies/Details/5
public ActionResult Details(Int32 id)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

Code First 通过使用Find方法找到要显示的Movie对象。如果movie对象为null,则返回HttpNotFound(),这个判断非常有必要。

Delete 和 DeleteConfirm 方法

// GET: /Movies/Delete/5
public ActionResult Delete(Int32 id)
{
    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(Int32 id)
{
    Movie movie = db.Movies.Find(id);
    db.Movies.Remove(movie);
    db.SaveChanges();
    return RedirectToAction("Index");
}

第一个Delete方法并没有删除Movie,而是返回了可以删除确认页面,在确认页面中,会创建HttpPost请求,完成Movie的删除。直接使用HttpGet 请求来删除Movie会打开一个安全漏洞。

真正删除数据的方法名字是 DeleteConfirmed。下面是两个方法的定义:

public ActionResult Delete(Int32 id)
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(Int32 id)

CLR对于重构的方法,要求方法名相同,但参数不同。然而,我们在这里用到的两个删除方法,他们都接收一个整形的参数,如果方法名也形同,那么就构成语法错误了。

为了解决这个问题,有以下几种解决办法:

第一种办法是使用不同的方法名。这也是ASP.NET MVC 5 支架所采用的方法。然而,使用这种方法还有一些小问题:ASP.NET 通过地址段来映射方法名,如果将方法重命名,路由通常会找不到方法,解决的办法已经在上面的例子中了,我们可以为DeleteConfirmed方法添加特性ActionName("Delete")。这样一来,当URL中包含Delete 的POST请求都会被分配给方法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 MVC5官方教程就全部写完了。配合上我原来的基础大部分的问题都可以解决了,希望也可以帮到你们。

时间: 2024-10-07 05:29:13

学习ASP .NET MVC5官方教程总结(十一)Details 和 Delete 方法详解的相关文章

学习ASP .NET MVC5官方教程总结(七)Edit方法和Edit视图详解

学习ASP .NET MVC5官方教程总结(七)Edit方法和Edit视图详解 在本章中,我们研究生成的Edit方法和视图.但在研究之前,我们先将 release date 弄得好看一点.打开Models\Movie.cs 文件.先添加一个引用: <span style="font-size:14px;">using System.ComponentModel.DataAnnotations;</span> 然后在Movie类中添加以下代码: [Display(

学习ASP .NET MVC5官方教程总结(六)通过控制器访问模型的数据

学习ASP .NET MVC5官方教程总结(六)通过控制器访问模型的数据 在本章中,我们将新建一个MoviesController 控制器,并编写获取电影数据的代码,使用视图模板将数据展示在浏览器中. 在进行下一步之前,你需要先编译应用程序,否则在添加控制器的时候会出错. 在解决方法资源管理器的Controllers文件夹右键,选择"添加">"新建搭建基架项": 在"添加支架"对话框,选择 包含视图的MVC 5控制器(使用 En),然后单击

学习ASP .NET MVC5官方教程总结(八)搜索查询

学习ASP .NET MVC5官方教程总结(八)搜索查询 在本节中,我们为 Index 方法添加查询功能,使我们能够根据电影的题材或名称进行查找. 首先,我们需要更新 MoviesController 的 Index 方法,代码如下: public ActionResult Index(string searchString) { var movies = from m in db.Movies select m; if (!String.IsNullOrEmpty(searchString))

学习ASP .NET MVC5官方教程总结(四)添加模型

学习ASP .NET MVC5官方教程总结(四)添加模型 在前面的几章中,我们学习了,MVC中"C"和"V"的创建方法和基本的使用方法,这一章我们来看一下"C"--模型的创建方法. 我们将添加一些管理电影数据库的类,这些类在ASP.NET MVC 应用程序中扮演"Model"的角色. 我们将使用.NET Framework平台上熟知的Entity Framework 数据访问技术来定义和使用这些模型.Entity Framew

学习ASP .NET MVC5官方教程总结目录

学习ASP .NET MVC5官方教程总结目录 我是一个刚刚离开校园,专升本完出来实习的专科生,在学校主攻的是java方向,来到实习的恩源公司后,知道公司的开发基本都是用ASP.NET MVC5做开发的.对于我来说这个还是比较陌生的一种技术,但是我相信有了JSP的开发基础后,来学习这个应该不难理解的,于是我从网上找到了MVC5官方教程来看.官方教程分为11个部分,那我的总结也分11部分来写吧,我在每一部分都会总结官方教程的知识和添加自己的理解.但是我接触这个时间也不长,如果那里理解错了,请随便批

学习ASP .NET MVC5官方教程总结(一)入门

学习ASP .NET MVC5官方教程总结(一)入门 在这一部分我们来学习教程的第一部分--入门,在讲之前先说一下我们的开发环境和版本,我们的开发环境是Visual Studio,版本是2013,我这里提供一个下载地址: http://www.iplaysoft.com/vs2013.html ,在这一章主要讲项目的搭建. 既然是讲项目的搭建,那么首当其冲的问题就是新建项目,打开我们的开发环境: .我们在开发环境的起始页面左侧可以清晰的看见4个字:新建项目.很明显这是新建开发项目的一种方式,第二

学习ASP .NET MVC5官方教程总结(二)添加控制器

学习ASP .NET MVC5官方教程总结(二)添加控制器 在这一章我们来简单讲解一下mvc的概念和控制器的建立和使用还有路由的使用. MVC设计模式是现在一种非常主流的开发模式,他有易于测试和维护的优点.它将传统的web开发分成了三个部分:模型-视图-控制器. 基于 MVC 应用程序中包含: Models: 表示应用程序的数据,并使用验证逻辑强制执行业务规则的数据的类. Views: 您的应用程序用来动态生成 HTML 响应的模板文件. Controllers: 处理传入的请求的浏览器,类检索

学习ASP .NET MVC5官方教程总结(十)添加验证

学习ASP .NET MVC5官方教程总结(十)添加验证 在本章中,我们将为Movie模型添加验证逻辑,并确认验证规则在用户试图使用程序创建和编辑电影时有效. ASP.NET MVC 的一个核心原则是DRY(Don't Repeat Yourself - 不做重复的事情).ASP.NET MVC 鼓励你一次性的指定功能或行为,然后应用程序的其它地方通过映射得到它,这样一来就减少了大量的代码,从而减少了出错误的可能性,并且更易于维护. ASP.NET  MVC  和 Entity Framewor

学习ASP .NET MVC5官方教程总结(三)添加视图

学习ASP .NET MVC5官方教程总结(三)添加视图 在上一章中我们讲了MVC中的"C",控制器Controllers,这一章我们来讲"V",视图Views的知识. 首先,打开我们的项目,打开我们的HelloWorldController,并修改Index(): <span style="font-size:14px;">public ActionResult Index() { return View(); }</span