MVC概念簡介
MVC的三大組件
1 三大組件(控制器,視圖,模型)
- 控制器(Control):處理用戶的輸入,負責改變模型的狀態並選擇適當的視圖來顯示模型的數據
- 視圖(View):就是用於顯示模型中數據的用戶界面,顯示的內容形式在這裏定義。
- 模型(Model):MVC需要提供的數據源,負責數據的訪問和維護,一般對應數據庫中的表,用於對數據庫表中的內容的同步。
2 組件之間交互
- 從上圖中可以看出,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 參考資料