【MVC5】6.从控制器访问您的模型的数据

在这一部分中,您将创建一个新的moviescontroller类写代码,检索数据并将其显示在电影中使用视图模板浏览器。

在进行下一步之前建立应用程序。如果你不建立应用程序,你会得到一个错误添加一个控制器。

在“解决方案资源管理器”中,右键单击“控制器”文件夹,然后单击“添加”,然后单击“控制器”按钮。

在“添加材料”对话框中,单击“MVC 5控制器和视图,使用实体框架,然后单击“添加”。

  • 控制器的名称选择MoviesController。
  • 选择电影 Movie
    (MvcMovie.Models)作为模型类。
  • 选择MovieDBContext (MvcMovie.Models)作为数据上下文类。

下面的图像显示已完成的对话框。

单击“添加”。(如果您收到一个错误,您可能没有在开始添加控制器之前创建应用程序):

Visual Studio创建下面的文件和文件夹:

  • MoviesController.cs在Controllers文件夹中。
  • Views\Movies文件夹。
  • Create.cshtml,Delete.cshtml,Details.cshtml,Edit.cshtml,和Index.cshtml在新建的Views\Movies文件夹中。

Visual Studio自动生成CRUD(创建,读取,更新,删除,你的行动)的方法与观点(CRUD操作方法和视图自动创建称为支架)。您现在有一个完全功能的Web应用程序,可以让您创建、列表、编辑和删除电影条目。

启动应用程序并单击MVC Movie的链接(或浏览Movies controller通过添加/Movies在浏览器的地址栏中的URL)。因为应用程序依赖于默认路由(在App_Start\RouteConfig.cs文件中定义),浏览器请求的http://localhost:xxxxx/Movies路由到Movies 
controller默认的Index动作方法。换句话说,浏览器实际上请求的是http://localhost:xxxxx/Movies/Index。运行结果是一个空的列表的电影,因为你还没有添加任何内容。

创建一个电影

选择创建新链接。请输入有关电影的详细信息,然后单击“创建”按钮。

注意:你可能无法在价格栏输入小数点或逗号。为了支持非英语语言环境,用逗号,jQuery验证(“,”)一个小数点,而非美国英语的日期格式,你必须包括globalize.js和特定文化/ globalize.cultures.js文件(从https://github.com/jquery/globalize)和JavaScript的使用globalize.parsefloat。我将展示如何在下一个教程中做到这点。现在,只要输入整个数字像10。

创建更多的电影条目。尝试编辑、详细信息和删除链接,这些链接都是功能性的。

检查生成的代码

打开Controllers\MoviesController.cs文件并检查生成的Index方法。用Index方法的movie
controller的一部分如下所示。

public class MoviesController : Controller
{
    private MovieDBContext db = new MovieDBContext();

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

Movies controller的一个请求返回Movies表中的所有条目,然后将结果传递给Index视图。下面从MoviesController类实例化一个movie数据库上下文,如前所述。可以使用movie 数据库上下文来查询、编辑和删除电影。

private MovieDBContext db = new MovieDBContext();

强类型Models和@model关键字

在本教程的时候,你看到一个控制器可以通过数据或对象使用ViewBag对象视图模板。ViewBag是一个动态对象,提供了一个方便的后期绑定的方式把信息传递给视图。

MVC也提供了通过强类型对象的一个视图模板的能力。这个强类型的方法可以更好的编译时检查你的代码和更丰富的智能感知在Visual Studio编辑器。Visual Studio中的脚手架机制使用这种方法(即通过强类型模型)与MoviesController类和视图时,它创造的方法和视图模板。

在Controllers\MoviesController.cs文件检查生成的Details节的方法。Details方法如下所示。

public ActionResult Details(int? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

id参数一般是通过路由数据,例如http://localhost:1234/movies/details/1将controller设置为movie
controller,把action设置为details和把id设置为1。

您也可以通过一个查询字符串传递的id如下:

http://localhost:1234/movies/details?id=1

如果找到一个电影,则将该电影模型的一个实例传递给Details视图:

return View(movie);

检查该视图的Views\Movies\Details.cshtml文件:

@model MvcMovie.Models.Movie

@{
    ViewBag.Title = "Details";
}

<h2>Details</h2>

<div>
    <h4>Movie</h4>
	<hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.Title)
        </dt>
         @*Markup omitted for clarity.*@
    </dl>
</div>
<p>
    @Html.ActionLink("Edit", "Edit", new { id = Model.ID }) |
    @Html.ActionLink("Back to List", "Index")
</p>

通过在视图模板文件的顶部包含一个 @model,您可以指定视图所期望的对象的类型。当你创建了movie
controller,Visual Studio自动包括以下声明@model在Details.cshtml文件顶部:

@model MvcMovie.Models.Movie

这个@model允许您访问通过使用强类型的模型对象传递给视图的控制器的电影。例如,在Details.cshtml模板,代码经过每一个电影领域的DisplayNameFor和 DisplayFor HTML
Helpers 的强类型对象模型。Create和Edit方法和视图模板也通过了一个电影模型对象。

检查的Index.cshtml视图模板和在MoviesController.cs文件的Index方法。注意在Index action方法中调用View helper方法时,代码将创建一个List对象。该代码将此电影列表从Index action方法传递给视图:

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

当你创建了movie控制器,Visual Studio自动在Index.cshtml文件顶部包括以下@model:

@model IEnumerable<MvcMovie.Models.Movie> 

这个@model允许您访问通过使用强类型的模型对象将控制器传递给视图的电影列表。例如,在Index.cshtml模板、代码的循环通过电影做一个foreach语句在强类型对象Model:

@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", new { id=item.ID })  |
            @Html.ActionLink("Delete", "Delete", new { id=item.ID })
        </td>
    </tr>
}

由于模型对象的强类型(如一个IEnumerable<Movie>对象),在回路的每个项目的对象是类型电影。其他好处是,这意味着你编译时的代码,在代码编辑器中完全的智能感知支持检查:

与SQL Server LocalDB一起工作

实体框架代码首先检测到提供指向的数据库连接字符串指向一个不存在的Movies数据库,所以代码首先自动创建数据库。你可以证明那是看在App_Data文件夹中创建。如果你没有看到Movies.mdf文件,单击“显示所有文件”按钮,在“解决方案资源管理器”工具栏上,单击刷新按钮,然后展开App_Data文件夹。

双击Movies.mdf打开“服务器资源管理器”,然后展开Tables文件夹看Movies表。在默认情况下,在标识旁边的键图标上,将使一个名为ID的属性为主键。

右键单击Movies并选择“显示表数据”来查看所创建的数据。

右键单击Movies表,然后选择“打开表定义”,查看“实体框架代码”为您创建的表结构。

注意看Movies表映射到你前面创建的Movie类的模式如何。实体框架代码首先基于您的Movie类自动为您创建此架构。

当你完成后,用鼠标右键单击MovieDBContext 然后选择Close
Connection。(如果你不关闭连接,你可能会得到一个错误,下次你运行该项目)。

您现在有一个数据库和页面来显示、编辑、更新和删除数据。在下一个教程中,我们将检查脚手架的其他代码和添加SearchIndex方法和SearchIndex视图使我们可以搜索该数据库中的电影。有关使用实体框架与MVC的更多信息,请参见创建一个ASP.NET的MVC应用实体框架的数据模型。

时间: 2024-11-05 20:35:31

【MVC5】6.从控制器访问您的模型的数据的相关文章

[Asp.net MVC]Asp.net MVC5系列——从控制器访问模型中的数据

目录 概述 从控制器访问模型中的数据 强类型模型与@model关键字 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列——添加视图 [Asp.net MVC]Asp.net MVC5系列——添加模型 概述 上篇文章介绍了如何添加Model,在这篇文章中,我们将通过控制器访问模型中的数据,还有有写朋友问我,这么简单的东西有必要分享吗?其实有些东西真的很简单,没必要分享,但是这也是我学习的历程,希望记录自己是

Asp.net MVC]Asp.net MVC5系列——从控制器访问模

目录 概述 从控制器访问模型中的数据 强类型模型与@model关键字 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列--第一个项目 [Asp.net MVC]Asp.net MVC5系列--添加视图 [Asp.net MVC]Asp.net MVC5系列--添加模型 概述 上篇文章介绍了如何添加Model,在这篇文章中,我们将通过控制器访问模型中的数据,还有有写朋友问我,这么简单的东西有必要分享吗?其实有些东西真的很简单,没必要分享,但是这也是我学习的历程,希望记录自己是

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

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

ASP.NET MVC5(二):控制器、视图与模型

前言 本篇博文主要介绍ASP.NET MVC中的三个核心元素:控制器.视图与模型,以下思维导图描述了本文的主要内容. 控制器 控制器简介 在介绍控制器之前,简单的介绍一下MVC工作原理:URL告知路由机制该使用哪个控制器(Controller),调用该控制器中的哪个方法(Action),并为该方法提供需要的参数.控制器响应用户的输入,在响应时修改模型(Model),并决定使用哪个视图(View),并对该视图进行渲染.注意:MVC模式提供的是方法调用结果,而不是动态生成的页面. 以上内容对于初学者

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

Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据 在这一节中,你将新创建一个新的 MoviesController类,并编写代码,实现获取影片数据和使用视图模板在浏览器中展现影片数据的功能.在进行下步之前,点击“生成应用程序“对应用程序进行编译.右键单击Controllers文件夹,新建一个名为“MoviesController ”的控制器.在创建窗口各选项如下图所示 点击添加,将创建以下文件和文件夹: 项目的 Controllers 文件夹下新增MoviesContr

【翻译转载】【官方教程】Asp.Net MVC4入门指南(5):从控制器访问数据模型

在本节中,您将创建一个新的MoviesController类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里. 在开始下一步前,先Build一下应用程序(生成应用程序)(确保应用程序编译没有问题) 用鼠标右键单击Controller文件夹,并创建一个新的 MoviesController控制器.当Build成功后,会出现下面的选项.设定以下选项: · 控制器名称: MoviesController.(这是默认值). · 模板: MVC Controll

ASP.NET MVC 5 -从控制器访问数据模型

原文:ASP.NET MVC 5 -从控制器访问数据模型 在本节中,您将创建一个新的MoviesController类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里. 在开始下一步前,先Build一下应用程序(生成应用程序)(确保应用程序编译没有问题) 在解决方案上,用鼠标右键单击Controller文件夹,点击新增,再选择Controller. 在Scaffold新增对话框,选择MVC 5  Controller with views, using

Asp.Net MVC4入门指南(5):从控制器访问数据模型

在本节中,您将创建一个新的MoviesController类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里. 在开始下一步前,先Build一下应用程序(生成应用程序)(确保应用程序编译没有问题) 用鼠标右键单击Controller文件夹,并创建一个新的 MoviesController控制器.当Build成功后,会出现下面的选项.设定以下选项: · 控制器名称: MoviesController.(这是默认值). · 模板: MVC Controll

[转]ASP.NET MVC 5 -从控制器访问数据模型

在本节中,您将创建一个新的MoviesController类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里. 在开始下一步前,先Build一下应用程序(生成应用程序)(确保应用程序编译没有问题) 在解决方案上,用鼠标右键单击Controller文件夹,点击新增,再选择Controller. 在Scaffold新增对话框,选择MVC 5  Controller with views, using Entity Framework, 点击新增. · 控制