当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET MVC4入门教程(五):从控制器访问数据模型

ASP.NET MVC4入门教程(五):从控制器访问数据模型

2017年12月12日  | 移动技术网IT编程  | 我要评论

泰国鬼片推荐,范冰冰晒抱猫照片,五维空间文明

在本节中,您将创建一个新的moviescontroller类,并在这个controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里。

在开始下一步前,先build一下应用程序(生成应用程序)(确保应用程序编译没有问题)

用鼠标右键单击controller文件夹,并创建一个新的 moviescontroller控制器。当build成功后,会出现下面的选项。设定以下选项:

· 控制器名称: moviescontroller.(这是默认值)。

· 模板: mvc controller with read/write actions and views, using entity framework.

· 模型类:movie (mvcmovie.models).

· 数据上下文类: moviedbcontext (mvcmovie.models).

· 意见:razor (cshtml).(默认值)。

单击添加。visual studio express 会创建以下文件和文件夹:

· 项目控制器文件夹中的moviescontroller.cs文件。

· 项目视图文件夹下的 movie文件夹。

· 在新的views\movies文件夹中创建create.cshtml、 delete.cshtml、 details.cshtml、 edit.cshtml和index.cshtml 文件。

asp.net mvc 4 自动创建 crud (创建、 读取、 更新和删除) 操作方法,和相关的视图文件(crud 自动创建的操作方法和视图文件被称为基础结构文件)。现在您有了可以创建,列表、 编辑和删电影entity 所有的web功能了。

运行应用程序,通过将/movies追加到浏览器地址栏 url的后面,从而浏览movies控制器。因为应用程序依赖于默认路由 ( global.asax文件中的定义),浏览器请求http://localhost:xxxxx/movies将被路由到movies控制器默认的index 操作方法。换句话说,浏览器请求http://localhost:xxxxx/movies等同于浏览器请求http://localhost:xxxxx/movies/index。因为您还没有添加任何内容,所以结果是一个空的电影列表。

创建电影

点击create new链接。输入有关电影的一些详细信息,然后单击create按钮。

单击create按钮将使得窗体提交至服务器,同时电影信息也会保存到数据库里,然后您会被重定向到url/movies,您可以在列表中看到您刚刚创建的新电影。

创建一些更多的电影数据。同时也可以尝试点击编辑、详细信息和删除功能的链接。

看一下生成的代码

打开controllers\moviescontroller.cs文件,并找到生成的index方法。一本部分电影控制器和index方法如下所示。

public class moviescontroller : controller
{
  private moviedbcontext db = new moviedbcontext();

  //
  // get: /movies/

  public actionresult index()
  {
    return view(db.movies.tolist());
  }
}

下面是moviescontroller类中实例化电影数据库上下文实例,如前面所述。电影数据库上下文实例可用于查询、 编辑和删除的电影。

private moviedbcontext db = new moviedbcontext();

向movies控制器请求,从而返回movies电影数据库表中的所有记录,然后将结果传递给index视图。

强类型模型和 @model 关键字

在本系列之前的教程中,您看到了使用viewbag对象,从控制器传递数据或对象给视图模板。viewbag是一个动态的对象,提供了方便的后期绑定方法将信息传递给视图。

asp.net mvc 还提供了传递强类型数据或对象到视图模板的能力。这种强类型使得更好的在编译时检查您的代码并在visual studio 编辑器中提供更加丰富的智能感知。当创建操作方法和视图时, visual studio 中的基础结构机制使用了moviescontroller类和视图模板。

controllers\moviescontroller.cs文件中看一下生成的details方法。电影控制器里的details方法如下所示。

public actionresult details(int id = 0)
{
   movie movie = db.movies.find(id);
   if (movie == null)
   {
     return httpnotfound();
   }
   return view(movie);
}

如果查找到了一个movie,movie 模型的实例会传递给detail视图。看一下views\movies\details.cshtml文件里的内容。

通过引入视图模板文件顶部的@model语句,您可以指定该视图期望的对象类型。当您创建电影控制器时,visual studio 会将@model声明自动包含到details.cshtml文件的顶部:

@model mvcmovie.models.movie

此@model声明使得控制器可以将强类型的model对象传递给view视图, 从而您可以在视图里访问传递过来的强类型电影model。例如,在details.cshtml模板中,displaynamefor 和 html helper通过强类型的model对象传递了电影的每个字段。创建和编辑方法还有视图模板都在传递电影的强类型模型对象。

看一下index.cshtml视图模版和moviescontroller.cs中的index 方法。请注意这些代码是如何在index操作方法中,创建对象,并调用view方法的。

此代码在控制器中传递movies列表给视图:

public actionresult index()
{
   return view(db.movies.tolist());
}

当您创建电影控制器时,visual studio express会自动包含 @model语句到index.cshtml文件的顶部:

@model ienumerable<mvcmovie.models.movie>

此@model声明使得控制器可以将强类型的电影列表model对象传递给view视图。例如,在index.cshtml模板中,在强类型的model对象上使用foreach语句循环遍历电影列表:

@foreach (var item in model) {
   <tr>
     <td>
       @html.displayfor(modelitem => item.title)
     </td>
     <td>
       @html.displayfor(modelitem => item.releasedate)
     </td>
     <td>
       @html.displayfor(modelitem => item.genre)
     </td>
     <td>
       @html.displayfor(modelitem => item.price)
     </td>
     <th>
       @html.displayfor(modelitem => item.rating)
     </th>
     <td>
       @html.actionlink("edit", "edit", new { id=item.id }) |
       @html.actionlink("details", "details", { id=item.id }) |
       @html.actionlink("delete", "delete", { id=item.id }) 
     </td>
   </tr>
}

因为model对象是强类型的 (是ienumerable<movie>对象),所以在循环中的每个item对象的类型是movie类型。好处之一是,这意味着您可以在代码编译时进行检查,同时在代码编辑器中支持更加全面的智能感知:

使用sql server localdb

entity framework code first代码优先,如果检测到不存在一个数据库连接字符串指向了movies数据库,会自动的创建数据库。在app_data文件夹中找一下,您可以验证它已经被创建了。如果您看不到movies.mdf文件,请在解决方案资源管理器工具栏上,单击显示所有文件按钮,单击刷新按钮,然后展开app_data文件夹。

双击movies.mdf打开数据库资源管理器,然后展开表文件夹以查看电影表。

注: 如果没有显示数据库资源管理器,可以从工具菜单中,选择连接到数据库,然后关闭选择数据源对话框。这样将强制打开数据库资源管理器。

注: 如果您使用的 vwd 或 visual studio 2010 可能会看到类似下面的错误信息:

· 因为数据库 ' c:\webs\mvc4\mvcmovie\mvcmovie\app_data\movies.mdf ' 是 706 版本的,所以无法打开。本服务器支持 655 和更早版本的数据库。无法降级支持。

· "invalidoperation exception was unhandled by user code" 所提供的 sqlconnection 没有指定初始数据库。

您需要安装和。并验证在前面所指定的moviedbcontext 连接字符串。

右键单击movies表并选择显示表数据以查看您所创建的数据。

右键单击movies表,选择打开表定义查看entity framework代码优先所创建表的表结构。

请注意,如何将movies表的表结构映射到您早些时候所创建的movie类?entity framework 代码优先为您自动创建了基于movie类的表结构。

当您完成操作后,通过右键单击moviedbcontext ,选择关闭连接关闭该数据库连接。(如果您没有关闭连接,当您下次运行该项目时,可能会出现错误)。

现在,您可以在简单列表页面里,来显示数据库里的数据了。在下一次的教程中,我们会继续看看框架自动生成的其它代码。并添加一个searchindex方法和searchindex视图,使您可以在数据库中搜索电影了。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网