当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET MVC 学习3、Controller左手从Model获取数据,右手传递到View页面

ASP.NET MVC 学习3、Controller左手从Model获取数据,右手传递到View页面

2018年02月01日  | 移动技术网IT编程  | 我要评论

qinmiairen,况晓雅18天艰难减肥日记,fj.10086

本文内容:

 

1,学习了解Model的具体作用

 

2,新建Controller从Model中读取数据传递到View中

 

3,了解Entity Framework Code First

 

4,清楚View页面中@model 声明的强类型转换

 

5,查看View .cshtml的新的HTML书写方法

 

 

 

一,Add a new Model  ,了解Model的作用

 

Model:存放Model Class,对应数据库中的table,存取Table中的数据

 

Model Class中的每一个实例对应数据库Table中的一行,实例中的每一个属性对应Table中的每一列值(Model Class和DB Table的映射关系)

 

 

 

Entity FrameWork关系数据模型定义,

 

可以看右边这张图,回头有时间在看连接的介绍

 

https://msdn.microsoft.com/en-us/data/aa937709

 

                                                                                                             

 

Right-click Model floder and Add a new Model Class:Movie.cs

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Data.Entity;

 

namespace MVCMovie.Models

{

    //Moive 类就相当于数据库中的一张名为Movie的Table

    //Movie 类实例化的对象相当于Table中的一行,实例的各个属性(ID,Title...)相当于Table中的列

    public class Movie

    {

        public int ID { get; set; }

        public string Title { get; set; }

        public DateTime ReleaseDate { get; set; }

        public string Genre { get; set; }

        public decimal Price { get; set; }

    }

    //MovieDBContext class ,继承自Entity Framework中的DbContext,代表这Movie数据上下文

    //MovieDBContext class ,读取、存储、更新Movie Class 实例

    public class MovieDBContext : System.Data.Entity.DbContext

    {

        public DbSet<Movie> Movies { get; set; }

    }

}

 配置WebConfig文件:

 

1

2

3

4

5

<connectionStrings>

    <!--ModleDBContext连接字符串,使Movie数据存放于数据库中-->

    <add name="MovieDBContext"  connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies.mdf;Integrated Security=True"  providerName="System.Data.SqlClient" /> 

    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-MVCMovie-20140304145549;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-MVCMovie-20140304145549.mdf" providerName="System.Data.SqlClient" />

  </connectionStrings>

 

 

 二,重建方案后,Add a new Control to Access Model’s Data ,了解数据Controller怎么从Model读取数据

 

Right-click Control floder and add a new control   

 

 

 

新添加的MovieController中就自动有了万增的增删查改的功能,CRUD (create, read, update, and delete),以及对应的CRUD View。页面中就可以creat,list,edit and delete Moive 实体(entries).   ctrl+F5运行: https://localhost:9898/movies

 

 

 

2.1查看系统自动生成的 MoviesController 中的代码:

 

1

2

3

4

5

6

7

8

9

10

11

//实例化一个MovieDBContext db,然后用这个实例化的对象去增查改删(GRUD)

        private MovieDBContext db = new MovieDBContext();

 

        //

        // GET: /Movies/

 

        public ActionResult Index()

        {

            //返回 Movie Database 中的所有的 Movie实例

            return View(db.Movies.ToList());

        }

2.2 强类型模型,和@model关键字

 

我们之前有讲过ViewBage是一个动态对象,可以把数据或对象从Controller传递到View中。ASP.NET MVC同样提供了强类型(strongly typed data)到view template.这种强类型,VS可以在编译的时候更好的检查你的代码以及提供智能感知(richer IntelliSence).这种脚手架机制(scaffolding mechanism),在Controller的Methods中和View Template的Views中都有体现。

 

现在我们先来看看Controller中自动生成的code

 

复制代码

 // GET: /Movies/Details/

        //以下方法,从实例化后的Movie对象中读取Movie数据

        public ActionResult Details(int id = 0)

        {

            //如果id对应的Movie找到,则Return到Detail.cshtml中

            Movie movie = db.Movies.Find(id);

            if (movie == null)

            {

                return HttpNotFound();

            }

            return View(movie);

        }

复制代码

然后转到View 中的Details.cshtml看一下,第一行:

 

1

@model MVCMovie.Models.Movie

Detail.cshtml最上面的这一行的声明(Statement),指定了object是View可以接受的类型

 

之前从Model生成MovieController的时候同时 也生成了Controller中Method对应的View,@model的声明也是系统自动加上去的

 

 

 

@model指令,对Model对象强制类型转换,把Controller从Model中获取的数据传递到View Template中

 

例如,在Detail.cshtml中,code把movie 字段中的数据通过 stronged typed的 MVCMovie.Models.Movie 把数据从Controller传递到Detail.cshtml中

 

Index.cshtml中,仔细查看代码,看一下数据是怎样在View中显示出来的

 

1

@model IEnumerable<MVCMovie.Models.Movie><br>......<br>  @foreach (var item in Model)<br>    {<br>        <tr><br>            <td><br>                @Html.DisplayFor(modelItem => item.Title)<br>            </td><br>            <td><br>                @Html.DisplayFor(modelItem => item.ReleaseDate)<br>            </td><br>            <td><br>                @Html.DisplayFor(modelItem => item.Genre)<br>            </td><br>            <td><br>                @Html.DisplayFor(modelItem => item.Price)<br>            </td><br>            <td><br>                @Html.ActionLink("Edit", "Edit", new { id = item.ID }) |<br>            @Html.ActionLink("Details", "Details", new { id = item.ID }) |<br>            @Html.ActionLink("Delete", "Delete", new { id = item.ID })<br>            </td><br>        </tr><br>    }

这一行statement同样是vs automatically create的

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网