ASP.NET MVC 學習三、Controller左手從Model獲取數據,右手傳遞到View頁面

參考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/accessing-your-models-data-from-a-controllerhtml

 

本文內容:web

1,學習瞭解Model的具體做用數據庫

2,新建Controller從Model中讀取數據傳遞到View中mvc

3,瞭解Entity Framework Code Firstasp.net

4,清楚View頁面中@model 聲明的強類型轉換ide

5,查看View .cshtml的新的HTML書寫方法學習

 

一,Add a new Model  ,瞭解Model的做用spa

Model:存放Model Class,對應數據庫中的table,存取Table中的數據.net

Model Class中的每個實例對應數據庫Table中的一行,實例中的每個屬性對應Table中的每一列值(Model ClassDB Table的映射關係)3d

 

Entity FrameWork關係數據模型定義,

能夠看右邊這張圖,回頭有時間在看鏈接的介紹

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

                                                                                                             

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

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文件:

<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運行: http://localhost:9898/movies

 

2.1查看系統自動生成的 MoviesController 中的代碼:

//實例化一個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),在ControllerMethods中和View TemplateViews中都有體現。

如今咱們先來看看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看一下,第一行:

@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中顯示出來的

@model IEnumerable<MVCMovie.Models.Movie>
......
  @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>
    }

這一行statement一樣是vs automatically create的

@foreach中的每個item就是一個Movie,這樣的好處是代碼能夠在編譯的時候進行檢查而且進行智能填充你的Code,以下圖:

 

三,Working with SQL Server LocalDB  學習Code First

Entity Framework若是發現webconfig中的鏈接字符串所指向(pointed) Movies database不存在,Code First就會自動建立這個DB:

 

Double-click Movies.mdf ,咱們能夠看到Entity Framework爲你建立的表:

 

Right-Click Movie table we see the data you Insert:

 

咱們如今看到的這張Movie表就和以前的Model中的Movie是對應的,Code First就是在 Movie Class的基礎上建立的這張表

Tips:在你關閉VS以前最好先 close Connection避免下次打開的時候彈出錯誤

 

如今你已經有了數據庫,而且能夠從簡單的頁面看到數據庫中的list.

下一步咱們會學習剩下的代碼,而且建立一個查詢頁面

See You......

相關文章
相關標籤/搜索