从一个控制器(Controller)存储您的模型(Model)数据(ASP.NET MVC3系列文章五)

10 篇文章 0 订阅

 

 原址:http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/getting-started-with-mvc3-part5-cs

这个教程将会使用Microsoft Visual Web Developer 2010 Express Service Pack 1来教会您构建一个基于ASP.NET MVC Web应用。 在您开始之前,请确保已经安装了下面罗列的必备条件。您可以点击接下来的链接来下载它们:Web Platform Installer。或者您可以使用下面的链接来单个安装:

如果您使用的是Visual Studio 2010, 可以点击接下来的链接来安装这些必备条件: Visual Studio 2010 prerequisites.

在这个Visual Web Developer项目中将会全程使用c#. Download the C# version.。如果您比较擅长VB, 可以在这个教程中改为VB Visual Basic version

 

在这次章节中,您将创建一个新的MoviesController 类并且书写代码返回电影数据,最后使用一个视图(View)模板在浏览器中显示它。在继续之前,请先确保已经构建了这个(电影)应用。

Controllers文件夹上右键,创建一个新的Controller,命名为MoviesController ,按照下面的选项进行选择:

  • Controller name: MoviesController. (这个是默认的。 )
  • Template: Controller with read/write actions and views, using Entity Framework.
  • Model class: Movie (MvcMovie.Models).
  • Data context class: MovieDBContext (MvcMovie.Models).
  • Views: Razor (CSHTML). (默认的。)

AddScaffoldedMovieController

单击Add。Visual Web Developer创建如下文件和文件夹:

  • 在项目的Controllers文件夹中的MoviesController文件。
  • 在项目的Views文件夹中的Movies 文件夹。
  • 在新的Views\Movies 文件夹中的Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml, andIndex.cshtml 文件。

NewMovieControllerScreenShot

这个ASP.NET MVC3为您自动的构建了CRUD(create, read, update, and delete)action方法和视图(Views)。 您现在拥有了一个对电影进行增加,显示,修改和删除的完整Web应用。

启动这个应用和浏览器,向您的浏览器地址栏中的URL追加/Movies ,链接到Movies控制器(Controller)。在Movies控制器(Controller)中,由于应用是依赖默认的路由(在Global.asax 文件中有定义),所以,这个浏览器请求 http://localhost:xxxxx/Movies 是路由到默认的Index的Action方法。换句话说,这个浏览器请求http://localhost:xxxxx/Movies 跟请求http://localhost:xxxxx/Movies/IndexIn 达到的效果是一样的。现在页面中的电影列表是空的,因为您还未添加任何数据。

创建一部电影

选择Create New链接,输入和下面相同的信息,然后单击Create按钮。

点击Create 按钮将会把表单信息传递到服务器,然后将电影信息存储到数据库中,然后页重定向到,/Movies URL,您会发现刚刚创建的电影信息已经出现在列表中。

IndexWhenHarryMet

创建更多的电影,并且尝试着点击下Edit, DetailsDelete链接。

分析生成的代码

打开Controllers\MoviesController.cs文件,然后看一下Index方法中生成的代码。下面展示的是movie控制器(Controller)中Index方法的一部分。

public class MoviesController : Controller 
{ 
    private MovieDBContext db = new MovieDBContext(); 
 
    // 
    // GET: /Movies/ 
 
    public ViewResult Index() 
    { 
        return View(db.Movies.ToList()); 
    }

MoviesController 中的下面一段代码是实例化movie数据库的上下文,上一节有说明过。您能够使用movie数据库上下文来对电影执行查询,修改以及删除操作。

private MovieDBContext db = new MovieDBContext();

一个请求发送到MoviesController中,然后从数据库中返回所有的电影列表,最后将结果传送到Index View。

强类型Modes和@model关键字

在这次教程的早些时候,您看到了怎么使用ViewBag对象在控制器(Controller)中来传送数据或对象到视图(View)模板中。ViewBag是一个动态对象,这意味着提供了一种延迟绑定的方式来传递信息到视图(View)中。

ASP.NET MVC也提供了传递强类型或对象到视图(View)模板的能力。这个强类型可以在编译时就检查代码的有效性并且在Visual Web Developer 编辑器中提供智能感知。我们将在MoviesController类和Index.cshtml视图中使用这种传递方式。

当在Index Action方法中调出视图(View)方法帮助器时,注意到这里是怎么用代码创建一个List对象。下面的代码是在控制器(Controller)中传递电影列表:

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

在View模板文件顶部,包含了@model声明,您能指定对象在View中预期的类型 。当您创建了MovieController,Visual Web Developer自动的在Index.cshtml文件中包含了下面的@model声明:

@model IEnumerable<MvcMovie.Models.Movie> 

这个@model允许您存储从控制器(Controller)传递到视图(View)模板的强类型实体对象(电影)。例如,在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> 
        <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>对象), 循环中的每个项都是一个Movie类型。这么做的好处是,在编译时就可以检查代码的正确性以及给所有类型提供智能感知。

ModelIntellisene

使用SQL Server Compact

Entity Framework “Code First” 通过数据库连接字符串,跟至今还没有创建的Movies数据库建立关系。所以“Coce First”自动的创建了数据库,您能在App_Data文件夹中验证这个数据库是否已经被创建了。如果您没有看到Movies.sdf这个文件,请在Solution Explorer 工具栏中单击Show All Files 按钮,然后单击Refresh 按钮,并且展开App_Data 文件夹。

SDF_in_SolnExp

Server Explorer中,双击Movies.sdf 文件,并打开,然后展开数据库中的Tables 文件夹,您会发现已经创建了一些表。

注意,如果您在双击Movies.sdf 时,发生了错误,请确保您安装了SQL Server Compact 4.0  (runtime + tools support).。(要链接到软件下载的链接,请看看顶部有关系列教程的必备条件)如果您刚刚已经安装了,您需要重启Visual Web Developer。

DB_explorer

这里有两个表,一个是用来存放电影的Movies表,一个是EdmMetadata表。这个EdmMetadata表是常常用于当Model和数据库没有同步时,Entity Framework初始化数据。

右击Movies 表选择Show Table Data,看看您创建的数据。

MoviesTable

右击Movies 表,然后选择Edit Table Schema

EditTableSchema

TableSchemaSM

注意下这里Movies的结构是怎么映射到早期您创建的Movie类。Entity Framework “Code First”自动的为您创建了这个基于Movie类的结构。

在结束以后,关闭连接(如果您没有关闭连接,您可能会在下次启动项目的时候引起一个错误)。

CloseConnection

您现在拥有了一个数据库和一个简单的列表页面用来显示电影内容。在下次教程中,我们将分析其他的代码并且创建一个SearchIndex 方法和一个SearchIndex View,以使我们可以在这个数据库中搜索电影。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值