ASP.NET MVC 5 学习教程:生成的代码详解
起飞网 ASP.NET MVC 5 学习教程目录:
- 添加控制器
- 添加视图
- 修改视图和布局页
- 控制器传递数据给视图
- 添加模型
- 创建连接字符串
- 通过控制器访问模型的数据
- 生成的代码详解
- 使用 SQL Server LocalDB
- Edit方法和Edit视图详解
- 添加查询
- Entity Framework 数据迁移之添加字段
- 添加验证
- Details 和 Delete 方法详解
打开文件 Controllers\MoviesController,检查生成的 Index 方法。MoviesController 的包含Index 方法的部分代码如下:
代码清单1:MoviesController.cs
public class MoviesController : Controller
{
private MovieDBContext db = new MovieDBContext(); //
// GET: /Movies/
public ActionResult Index()
{
return View(db.Movie.ToList());
}
在MovieController 类中,包含了 MovieDBContext 类的实例,你可以使用它进行查询、编辑和删除电影。
MoviesController 的 Index 方法将返回所有数据库中的电影数据,然后将结果传递给 Index 视图。
强类型模型和@model关键字
在之前的章节中,我们已经介绍了如果使用 ViewBag 将数据从控制器传递给视图。ViewBag 是一个动态对象,提供了一个便捷的后期绑定的方式将数据传递给视图。
ASP.NET MVC 同样提供了传递强类型数据或对象到视图的功能。这种强类型的方式提供了更好的编译时检查和更丰富的智能感知,Visual Studio 中的脚手架机制在创建 MoviesController 类和视图的时候使用了这种方式。
检查 Controllers\MoviesController.cs 文件中的 Details 方法,下面是Detais方法的部分代码:
代码清单2:Details 方法 - Controllers\MoviesController.cs
public ActionResult Details(Int32 id)
{
Movie movie = db.Movie.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
参数 id 通常会作为路由数据传递给控制器,例如 http://localhost:1234/movies/details/1
将会设置控制器为 MoviesController,操作为 Details,参数 id 为1。你还可以通过查询字符串传递 id:http://localhost:1234/movies/details?id=1
如果找到了电影信息,一个电影的模型就会传递给Details视图。检查一下 Views\Movies\Details.cshtml 文件的内容。
通过文件顶部的@model 语句,你就知道这个视图所期望的什么类型的对象。当你创建了电影控制器,Visual Studio 将会自动在Details.cshtml 文件顶部包含如下语句:
代码清单3:@model语句 - Details.cshtml
@model MvcMovie.Models.Movie
@model 指令允许使用强类型 Model 对象访问从 Controller 传递给 View 的电影对象(注意,此时的Model对象是 Movie 类型)。例如,在Details.cshtml 模板中,代码将Movie的每一个字段通过强类型的 Model 对象传递给DisplayNameFor 和 DisplayFor HTML帮助方法。Create 和 Edit 方法也传递了一个Model给视图,此处不再多讲。
检查 Index.cshtml 模板和 MoviesController.cs 文件的 Index 方法,程序先创建好一个电影模型的列表对象,然后将创建好的列表对象通过View方法传递给视图:
代码清单4:Index 方法 - MoviesController.cs
public ActionResult Index()
{
return View(db.Movie.ToList());
}
Visual Studio 自动在 Index.cshtml 文件顶部添加了@model 语句:
代码清单5:@model语句 - Index.cshtml
@model IEnumerable<MvcMovie.Models.Movie>
@model 指令允许使用强类型 Model 对象访问从 Controller 传递给 View 的电影列表对象(注意,此时的Model对象是 IEnumerable<Movie> 类型)。例如,在Index.cshtml模板中,代码通过foreach 语句循环强类型Model中的每个电影对象。
代码清单6:foreach 代码块 - Index.cshtml
@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>
}
因为Model对象是强类型(IEnumerable<Movie>
),每个循环中的 item 对象都是 Movie 类型的。这意味着你的代码具有更好的编译时检查和完整的智能感知支持:
图1:foreach语句中的智能感知
本文同时发布在起飞网,原文地址:http://www.qeefee.com/mvc/mvc-5-examining-the-generated-code
如果认为此文对您有帮助,别忘了支持一下哦!
ASP.NET MVC 5 学习教程:生成的代码详解的更多相关文章
- ASP.NET MVC 5 学习教程:快速入门
起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控制器访问模型的数据 生成的代码详解 使用 SQL Se ...
- ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解
原文 ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解 在教程的这一部分,我们将研究一下自动生成的 Details 和Delete 方法. Details 方法 打开M ...
- ASP.NET MVC 5 学习教程:添加验证
原文 ASP.NET MVC 5 学习教程:添加验证 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控 ...
- ASP.NET MVC 5 学习教程:数据迁移之添加字段
原文 ASP.NET MVC 5 学习教程:数据迁移之添加字段 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符 ...
- ASP.NET MVC 5 学习教程:添加查询
原文 ASP.NET MVC 5 学习教程:添加查询 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控 ...
- ASP.NET MVC 5 学习教程:Edit方法和Edit视图详解
原文 ASP.NET MVC 5 学习教程:Edit方法和Edit视图详解 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 ...
- ASP.NET MVC 5 学习教程:使用 SQL Server LocalDB
原文 ASP.NET MVC 5 学习教程:使用 SQL Server LocalDB 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 ...
- ASP.NET MVC 5 学习教程:通过控制器访问模型的数据
原文 ASP.NET MVC 5 学习教程:通过控制器访问模型的数据 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连 ...
- ASP.NET MVC 5 学习教程:创建连接字符串
原文 ASP.NET MVC 5 学习教程:创建连接字符串 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 ...
随机推荐
- [转]android Handler使用
转 http://blog.csdn.net/new_abc/article/details/8184634 不过这个我看不懂 不知道为什么i的值可以接着增长... package com.examp ...
- IT项目经理
项目经理是具体项目工作的管理者,他们在工作中不断提升自己的领导才华,同时该职业又是一个权利与责任并存的职业, 他们主要对项目进行背景调查,收集整理项目相关资料,进行需求策划,撰写项目调查报告和信息综述 ...
- Protel99se教程七:创建PCB元件封装
在上一节课当中,我们给大家讲解了如何制作SCH原理图的元件库,这一节课,我们给大家讲解的是如何制作protel99se封装,在我们制作好元件好,需要制作对应的封装库,以供PCB设计所用. 第一步:进入 ...
- 宣布发布 Windows Azure ExpressRoute,宣告与 Level 3 建立全新的合作伙伴关系并推出关于其他 Azure 服务令人振奋的更新
在我们与世界各地的客户和合作伙伴交谈时,总会听到他们说,希望找到一个提供商帮助他们最大限度地发挥内部部署投资的作用并且能够利用云的灵活性.这是我们构建混合云策略和云操作系统愿景的基本原则.本着我 ...
- C++之sort函数
C++中的sort函数可以直接完美地取代Pas中十多行的快排代码,在这里,总结一下sort函数的用法: 首先是不加参数的情况: #include<cstdio> #include<a ...
- 使用js对select动态添加和删除OPTION示例代码
动态删除select中的所有options.某一项option以及动态添加select中的项option,在IE和FireFox都能测试成功,感兴趣的朋友可以参考下,希望对大家有所帮助 <s ...
- BZOJ 1639: [Usaco2007 Mar]Monthly Expense 月度开支( 二分答案 )
直接二分答案然后判断. ----------------------------------------------------------------------------- #include&l ...
- 创建js对象和js类
//第一种定义方式 var person=new Object(); //创建了一个对象. person.name="tom"; //使用person对象对调用name属性,它的值 ...
- Laravel 5.1 ACL权限控制 一
请自行添加命名空间,代码下载地址 https://github.com/caoxt/learngit 1.所需要用到的数据表 users(用户表).roles(角色表).role_user(用户角色对 ...
- 使用python操作RabbitMQ,Redis,Memcache,SQLAlchemy 其二
一.概念 1.Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态 ...