2_MVC簡單概念的介紹


MVC概念簡介


MVC的三大組件

1 三大組件(控制器,視圖,模型)

  • 控制器(Control):處理用戶的輸入,負責改變模型的狀態並選擇適當的視圖來顯示模型的數據
  • 視圖(View):就是用於顯示模型中數據的用戶界面,顯示的內容形式在這裏定義。
  • 模型(Model):MVC需要提供的數據源,負責數據的訪問和維護,一般對應數據庫中的表,用於對數據庫表中的內容的同步。

2 組件之間交互
MVC

  • 從上圖中可以看出,MVC從用戶發送請求到頁面呈現結果大致經歷了五個步驟,分別如下:
    • 用戶在瀏覽器輸入地址,向頁面發送請求(實則是向控制器發出相關命令);
    • 控制器接受命令後,向模型請求獲得相關的數據;
    • 模型將相應的數據返回給控制器;
    • 控制器將相關數據發送到指定的視圖;
    • 指定的視圖呈現相關的數據。
  • 其中控制器可以向模型輸入數據,並利用2*步驟同步到數據庫中,也可以利用3*步驟從數據庫中取出信息存放到Model中,在返回給控制器。
  • 從這五個步驟中,發現控制器起着承上啓下的中樞作用,職責變得更加明晰,這也就是開發者主要關注的組件了。

MVC在ASP.NET中的Demo


實際項目中的目錄結構

  • 首先.NET MVC是一種約定優於配置的技術,不管是項目的目錄結構還是文件名,Model類中字段等都有默認的約定。

    • 結構

    • App_Start:存放了4以前的版本中會在Global.aspx中定義的路由配置,過濾器配置以及WebApi配置,並作爲一個單獨的cs文件存在。

    • App_Data:存放的是數據庫的文件,本文采用外置Sql Server這裏就不用關注。
    • Content:存放CSS、圖片等靜態資源文件。
    • Controllers: 存放一系列以***Controllers命名的控制器組件,執行與模型和視圖的交互,一般業務會提取到業務邏輯層中,而在Control 中只是調用業務邏輯層進行處理。
    • Models: 存放Linq to SQL或ADO.NET Data Entity Model等模型組件和對應數據庫中的表的實體類,而數據操作,一般會提取到數據訪問層中。

    • Scripts: 存放應用程序必須的Javascript文件。

    • Views: 存放與Controllers在與方法對應的視圖,注意:如果存在***Controllers控制器,在Views中就必然會映射一個***命名的文件夾。在Views之下的Shared則存放視圖組件的公共部分,這部分可以作爲公共模板頁,供其它視圖的頁面繼承。

項目中的交互流程

  • 我們可以查看App_Start文件夾下的RouteConfig.cs文件,裏面定義了項目的默認路由以及路由默認的訪問方式(Url)。
    路由
    有圖看出:默認訪問的是Home控制器的Index action。訪問的默認Url是:controller/action/id

  • 這個時候我們並不真正建立數據庫,只是建立Model,現在Model中建立一個User的類,(會通過下文EF進行數據庫的映射)

namespace GradeMIS.Models
{
    public class User
    {
        public int UserId { get; set; }
        public String UserName { get; set; }
        public String UsePasswd { get; set; }
    }
}

以上簡單定義了User的Model類,用來描述Mvc的過程。

  • 接下來我們可以建立一個Controller:HomeController
  • 在controller文件夾上右鍵,添加,控制器,改名稱,空模板
namespace GradeMIS.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()//action
        {
            //模擬
            User user=new User();
            user.Name="測試數據";           
            return this.View(user);
        }
    }
}
  • 上述代碼創建了一個HomeController,默認建立了一個Index的Action,Action中,得到一個User Model類,將結果返回到視圖,並將user傳遞過去了,返回值ActionResult,他有很多子類。

  • 子類
    你可以根據返回的內容確定返回值。比如我們返回的是頁面,便可以使用ViewResult。

  • 接下來我們就可以建立一個視圖

    • 在控制器空白處右鍵,添加視圖(AddView)
    • 添加視圖
      便會彈出上面的頁面,讓你設置1:視圖名稱,與對應的Action名稱相同
      2 :頁面解析引擎是Razor,就是創建cshtml頁面;3:創建一個強類型的視圖,就是定義我們從控制器傳過去的對象的類型;4:模板代碼,我們傳遞過去是顯示詳情,還有其他模板:創建,刪除,遍歷,修改等。
      5:使用佈局模板頁,使本頁面集成模板頁面佈局,不設定將採用默認在_viewstart文件中的設定。

    • 然後再視圖頁面就可以顯示我們傳遞過去的信息

@model GradeMIS.Models.User//強類型

@{
    ViewBag.Title = "詳細信息";//頁面標題
    //Layout = "~/Views/Shared/_Layout.cshtml";定義的是佈局頁面
}
...
  • 這個時候你運行,訪問,就會默認訪問HomeController的Index action然乎跳轉到Home文件夾下的Index視圖顯示信息。

小結


1 本文講解了MVC的架構,以及在VS中演示了MVC運行的流程,從用戶發送請求到控制器,控制器通過MODEL與數據庫進行交互,再將結果傳遞給視圖,視圖定義顯示的樣式,將結果呈現給用戶。

2 參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章