Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据

在这一节中,你将新创建一个新的 MoviesController类,并编写代码,实现获取影片数据和使用视图模板在浏览器中展现影片数据的功能。
在进行下步之前,点击“生成应用程序“对应用程序进行编译。
右键单击Controllers文件夹,新建一个名为“MoviesController ”的控制器。在创建窗口各选项如下图所示

点击添加,将创建以下文件和文件夹:

  • 项目的 Controllers 文件夹下新增MoviesController.cs文件
  • 项目的Views文件夹下新增Movies文件夹
  • 在Views/Movies文件夹下创建了Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml, 和 Index.cshtml 五个文件。

ASP.NET MVC 4为你自动生成CRUD(创建、读取、修改和删除)操作方法和视图(自动创建CURD操作方法和视图常被称为脚手架)。现在,你拥有了一个完整功能的web应用程序,可以显示影片列表和详细信息、创建影片、编辑影片和删除影片。

运行应用程序,在浏览器地址栏附加/Movies,访问Movies控制器。因为应用程序依赖默认路由(在Global.asax文件中定义),浏览器请求 http://localhost:xxxxx/Movies被路由到默认的Movies控制器的Index操作方法。换句话说,浏览器请求 http://localhost:xxxxx/Movies与请求http://localhost:xxxxx/Movies/Index的效果是相同的。因为你没有添加任何数据,所以当前影片列表是空的。

查看自动生成的代码

打开Controllers\MoviesController.cs文件,查看下生成的Index方法

public ActionResult Index()
{
  return View(db.Movies.ToList());
}

MoviesController 类声明的下一行private MovieDBContext db = new MovieDBContext();是一个前面描述过的影片数据库上下文对象,你可以使用这个对象查询、编辑和删除影片。

影片控制器收到请求后,返回数据库影片表中所有实体并把结果传给Index视图。

强类型模型和@model关键字
在之前的教程中,学习过控制器如何通过ViewBag对象传递数据或对象给视图模板。ViewBag是一个动态对象,提供便利的晚绑定方式来传递信息给视图。ASP.NET MVC同时提供传递强类型数据或对象给视图模板的能力。强类型方式更有利于编译时检测代码和在Visual Studio编辑器中智能提示。Visual Studio的脚手架机制创建方法和视图时,采用这种方式来处理MoviesController类和视图模板。

查看下Controllers\MoviesController.cs文件中生成的Details方法。代码如下:

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

如果找到影片,则影片模型的实例传递给Detail视图。看一下Views\Movies\Details.cshtml 的文件内容。

通过在视图模板文件顶部引入@model MvcMovie.Models.Movie语句,你可以指定视图期望的对象类型。当你创建影片控制器时,Visual Studio自动在Details.cshtml文件顶部引入@model语句:

@model使你可以直接访问控制器传递给视图的强类型模型对象。例如,在 Details.cshtml 模板里,代码使用强类型对象传递影片的每个字段给HTML Helpers 的DisplayNameFor和DisplayFor方法。

Create和Edit方法及视图模板同样传递影片模型对象。

查看 Index.cshtml 视图模板和MoviesController.cs文件中的Index方法。注意在Index方法中,被视图Helper方法调用时,代码如何创建列表对象。

public ActionResult Index()
{
return View(db.Movies.ToList());
}

当你创建影片控制器时,Visual Studio在Index.cshtml文件顶部自动引入以下@model语句:@model IEnumerable<MvcMovie.Models.Movie>

@model 语句使你可以直接访问由控制器通过强类型对象传递过来的影片列表。例如,在Index.cshtml 模板里,代码通过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>
}

因为模型对象是强类型的( IEnumerable<Movie>对象),循环中的每个对象类型是Movie。这意味着编译时检测代码和代码编辑器中完全的智能提示。

使用Sql server 本地数据
译者注:在上面例子中你可能会奇怪,填写的影片信息究竟存放到哪里,内存吗?重启web,发现添加的信息仍能保存,说明不是内存,下面就来说一下此问题。
实体框架代码先行模式检测到指向影片数据库的连接字符串不存在,则会自动创建数据库。你可以通过查看App_Data文件夹来确认数据库已经被创建。如果你没看到数据库文件,在解决方案资源管理器工具栏点击“显示所有文件”按钮刷新按钮,然后展开App_Data文件夹,文件名一般为“MvcMovie.Models.MovieDbContext.mdf”,双击此文件,自动打开服务器资源管理器,展开“表”文件夹,会看到Movie表。

右键单击Movie表,选择“打开表定义”,查看实体框架代码先行为你创建的表结构

CREATE TABLE [dbo].[Movies] (
[ID] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (MAX) NULL,
[Genra] NVARCHAR (MAX) NULL,
[Price] DECIMAL (18, 2) NOT NULL,
[Date] DATETIME NOT NULL,
CONSTRAINT [PK_dbo.Movies] PRIMARY KEY CLUSTERED ([ID] ASC)
);

注意Movie表如何映射到你之前创建的Movie类。实体框架代码先行基于你的Movie类自动创建表结构。结束查看,需要通过右键单击MvcMovie.Models.MovieDbContext,选择关闭连接。(如果不关闭连接,则下次运行项目时有可能出错)。

现在创建了数据库,并从中获取数据显示了简单列表。在下一节课程中,我们将查看其余的脚手架生成的代码并增加名为SearchIndex方法和视图用于查询数据库中影片信息。

译者注:如何不使用本地数据库,而是连接正式数据库呢?其实在原英文教程的上节结尾说明过,当时觉得提出太突兀,译者未在上节中翻译出,在此补充。

MovieDbContext负责连接数据库,映射影片对象到数据库记录。你可能会问一个问题,如何指定要连接哪个数据库?该工作是通过在应用程序的Web.config 文件里增加连接信息来实现的。
打开应用程序根目录下的Web.config文件(不是View文件夹下的Web.config文件),下面的例子展示了新的连接字符串被添加:

<connectionStrings>
<add name="DefaultConnection"
connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-MvcMovie-2012213181139;Integrated Security=true"
providerName="System.Data.SqlClient"
/>
<add name="MovieDbContext"
connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies.mdf;Integrated Security=True"
providerName="System.Data.SqlClient"
/>
</connectionStrings>

注意键值需要是MovieDbContext,与类名一致。

Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据的更多相关文章

  1. Asp.Net MVC4.0 官方教程 入门指南之四--添加一个模型

    Asp.Net MVC4.0 官方教程 入门指南之四--添加一个模型 在这一节中,你将添加用于管理数据库中电影的类.这些类是ASP.NET MVC应用程序的模型部分. 你将使用.NET Framewo ...

  2. Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图

    Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图 在本节中,您需要修改HelloWorldController类,从而使用视图模板文件,干净优雅的封装生成返回到客户端浏览器HTML ...

  3. Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器

    Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器 MVC概念 MVC的含义是 “模型-视图-控制器”.MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程 ...

  4. 【译】ASP.NET MVC 5 教程 - 6:通过控制器访问模型的数据

    原文:[译]ASP.NET MVC 5 教程 - 6:通过控制器访问模型的数据 在本节中,你将新建一个MoviesController 类,并编写获取电影数据的代码,使用视图模板将数据展示在浏览器中. ...

  5. ASP.NET MVC4 新手入门教程之五 ---5.用控制器访问模型数据

    在本节中,将创建一个新的MoviesController类并编写代码来检索电影数据并将其显示在浏览器中使用一个视图模板. 才走出下一步生成应用程序. 用鼠标右键单击控制器文件夹中并创建一个新的 Mov ...

  6. 主攻ASP.NET MVC4.0之重生:上下滑动屏幕动态加载数据

                @{ ViewBag.Title = "Index"; } <!DOCTYPE html> <html> <head> ...

  7. 【译】ASP.NET MVC 5 官方教程 - 目录

    ASP.NET MVC 5 官方教程 - 目录 [译]ASP.NET MVC 5 教程 - 1:入门 [译]ASP.NET MVC 5 教程 - 2:添加控制器 [译]ASP.NET MVC 5 教程 ...

  8. 建筑材料系统 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发

    框架介绍: 1.基于 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发 2.采用MVC的框架模式,具有耦合性低.重用性高.生命周期成本低.可维护性 ...

  9. 利用CSS预处理技术实现项目换肤功能(less css + asp.net mvc4.0 bundle)

    一.背景 在越来越重视用户体验的今天,换肤功能也慢慢被重视起来.一个web系统用户可以选择一个自己喜欢的系统主题,在用户眼里还是会多少加点分的.我们很开心的是easyui v1.3.4有自带defau ...

随机推荐

  1. Open source and free log analysis and log management tools.

    Open source and free log analysis and log management tools. Maintained by Dr. Anton Chuvakin Version ...

  2. c语言libcurl 使用实例get/post方法+c语言字符串处理

    #include <stdio.h> #include <curl/curl.h> #include <string.h> #include <ctype.h ...

  3. DELL服务器安装Windows server 2003---解决找不到安装在计算机上的硬盘驱动器 安装无法

    安装Windows server 2003系统,本以为改改BIOS配置“改为从光驱启动优先”很容易搞定的.没想到系统安装过程中碰到“找不到安装在计算机上的硬盘驱动器安装无法继续,要退出请按F3”问题, ...

  4. 智能家居项目(2):项目project框架的搭建

    项目管理器: Linux中的项目管理器"make"有些类似于windows中的Visual C++里的"project",它是一种控制编译或者反复编译软件的工具 ...

  5. 1.一步一步学c#(一):.NET体系结构(知识点)

    一.C#和.NET关系     1. 首先C#语言有两个很重要的方面:第一它是为了Microsoft的.NET Framework的结合而设计的,其次它是一种为问题而设计解决问题的方法的语言,它有很多 ...

  6. nodejs教程:安装express及配置app.js文件

    express.js是nodejs的一个MVC开发框架,并且支持jade等多种模板.下面简单来说说express的安装和app.js文件的配置,然后在今后的教程中一步一步使用express.js搭建个 ...

  7. log4j 详解

      转载自:http://www.blogjava.net/hwpok/archive/2008/08/23/223891.html >>>>1. 概述<<< ...

  8. NET,ASP.NET,C#,WinFrom之间的联系与区别

    1:C#是编程语言(静态,强类型).类似中文.德文.英文这样. 2:.NET是一个平台(可承载多个编程语言,比如C# C++.net J# VB.Net),       但是都是运行在.net Fra ...

  9. codeforces 377B Preparing for the Contest 二分+优先队列

    题目链接 给你m个bug, 每个bug都有一个复杂度.n个人, 每个人有两个值, 一个是能力值, 当能力值>=bug的复杂度时才可以修复这个bug, 另一个是雇佣他需要的钱,掏一次钱就可以永久雇 ...

  10. python基础学习笔记5--对象方法、属性和迭代器

    对象方法.属性和迭代器 1.构造方法 1)构造方法和一般方法的不同点:当一个对象被创建后,会立即调用构造方法. 2)在Python中创建一个构造方法很容易,只要把init方法的名字从简单的init修改 ...