Terry的学习笔记--ASP.NET MVC 4 HELLO WORLD 从控制器访问模型中的数据
我们将在接下来创建一个MoviesController类读取movie的数据然后显示在页面上
在我们创建的HelloWorld工程中创建一个新的控制器MoviesController,创建的方法在前几张中已有提及,与之前有所不同的是,这次我们不用默认空白的模板,具体参数如下
Controller name: MoviesController. (This is the default. )
Template: MVC Controller with read/write actions and views, using Entity Framework.
Model class: Movie (HelloWorld.Models).
Data context class: MovieDBContext (HelloWorld.Models).
Views: Razor (CSHTML). (The default.)
所有的类都是可选的,如果下拉列表中没有需要的类,可以尝试重建整个工程。
可以看到系统自动创建了控制器和视图(包括增、删、改、查的页面)
现在可以尝试浏览一下我们的Movie页面,运行我们的网站并来到Movies页面(http://localhost:xxxx/movies)
我们可以创建一个新的movie数据
Movie数据将显示为
我们可以查看详细信息,修改或删除,当然这些都是系统自动生成的
接下来我们检查一下系统生成的代码,看看它到底做了些什么
打开Controllers\MoviesController.cs然后看一下index方法, 它调用了在上一章中我们定义的MovieDBContext
public class MoviesController : Controller
{
private MovieDBContext db = new MovieDBContext();
//
// GET: /Movies/
public ActionResult Index()
{
return View(db.Movies.ToList());
}
调用MovieDBContext之后Index方法给视图返回了一个Movies的List对象。
还记得我们是怎么声明这个控制器的么
Controller name: MoviesController. (This is the default. )
Template: MVC Controller with read/write actions and views, using Entity Framework.
Model class: Movie (HelloWorld.Models).
Data context class: MovieDBContext (HelloWorld.Models).
Views: Razor (CSHTML). (The default.)
一开始我们就声明了调用movie这个数据库模型,然后调用MovieDBContext这个上下文来连接数据库。
强定义模型类型(Strongly Typed Models)和@model关键字
之前我们也讨论过控制器如何使用ViewBag对象将控制器中的数据传递给视图。ViewBag是一个dynamic对象,它使我们可以很方便的在控制器和视图中间传递数据。除此之外,MVC还允许我们传递强类型数据或对象给视图模板。
在Controller\MoviesController.cs文件中,Details方法就是用的这么一种传递方式
public ActionResult Details(int id = 0)
{
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
如果数据库中存在对应数据,Movie对象将被传送到Details视图。
然后我们到Views\Movies\Details.cshtml文件,在顶部使用@model关键字定义对象
@model HelloWorld.Models.Movie
@model直接允许视图访问控制器传输过来的Model对象,比如在details.cshtml中,在顶部定义了@model之后,之后的html中就可以通过model来访问控制器传来对象
<div class="display-label">
@Html.DisplayNameFor(model => model.Title)
</div>
Model对象也可以是一个数据集比如List,在Moviescontroller中的index方法返回的就是一个List对象
public ActionResult Index()
{
return View(db.Movies.ToList());
}
这时在视图顶部就需要这么声明model对象了
@model IEnumerable<HelloWorld.Models.Movie>
然后就想index.cshtml中所用的
接下来我们来看数据库,其实VS2012已经为你生成了一个Movies.mdf文件,在工程下面的app_data文件夹下面,我们可以通过VS2012 数据库组件对这个数据库进行操作。