欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET MVC4入门教程(九):查询详细信息和删除记录

程序员文章站 2023-12-16 18:21:16
在本教程中,您将查看自动生成的details和delete方法。 查询详细信息和删除记录打开movie控制器并查看details方法。 public actio...

在本教程中,您将查看自动生成的details和delete方法。

查询详细信息和删除记录打开movie控制器并查看details方法。

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/1http://localhost:xxxx/movies/details/12345 (或某些其它值,不代表实际影片的值)从而使得链接url 出现错误。如果您没有检测是否找到了movie, null movie会导致出现数据错误。

查看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 = 0)
{
  movie movie = db.movies.find(id);
  if (movie == null)
  {
    return httpnotfound();
  }
  db.movies.remove(movie);
  db.savechanges();
  return redirecttoaction("index");
}

请注意,delete的http 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 = 0)
 
//
// post: /movies/delete/5
[httppost, actionname("delete")]
public actionresult deleteconfirmed(int id = 0)

公共语言运行时 (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 数据库中存储数据。您可以创建、 读取、 更新、 删除和搜索电影。

如果您想要部署应用程序,最好先在您本地的iis 7 服务器上测试一下您的应用程序。您可以使用此 web platform installer 链接启用iis服务器的 asp.net 应用程序的设置。请参阅下面的部署链接:

· test your asp.net mvc or webforms application on iis 7 in 30 seconds

· asp.net deployment content map

· enabling iis 7.x

· web application projects deployment

现在鼓励您开始学习中级内容 creating an entity framework data model for an asp.net mvc applicationmvc music store 教程, 浏览 asp.net articles on msdn,的文章,再看看很多的视频和资源:来了解更多关于 asp.net mvc 的信息 ! asp.net mvc forums 论坛是一个好地方,可以用来问您想要知道的问题。

上一篇:

下一篇: