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 数据库组件对这个数据库进行操作。

 

 

 

posted @ 2012-12-24 14:31  terryxym  阅读(511)  评论(0编辑  收藏  举报