完整的ASP.NET MVC架構是基於Microsoft .NET Framework 3.5,另外還使用LINQ。
MODEL是什麼?
1. MVC MODEL基本上就是一個C#或者VB.NET的類。
2. MODEL將同時被CONTROLLER和VIEW訪問。
3. MODEL被CONTROLLER用來傳輸數據給到VIEW層。
4. VIEW層將使用MODEL來在頁面上顯示數據。
5.MODEL可以是具體的數據模型,實體類
VIEW是什麼?
1. VIEW層主要都是一些cshtml 頁面文件,他們不包括後臺代碼。
2. 在VIEW層中可以對所有的頁面,進行HTML生成和格式化。
3. 可以在VIEW層中使用內聯代碼,進行動態頁面開發。
4. VIEW層中的cshtml 頁面的請求,只能調用CONTROLLER中的方法。
CONTROLLER是什麼?
1. Controller基本上都是一些繼承了system.mvc.controller的C#或者VB.NET的類。
2. Controller是整個MVC架構的核心。
3. 在Controller類中的方法都是用來相應瀏覽器或者VIEW層的請求。
4. Controller將使用MODEL層來向VIEW層的頁面傳輸數據。
5. Controller使用VIEWDATA來傳輸任何數據給到VIEW層。
MVC文件結構和文件的命名規範。
MVC程序開發中,使用標準的文件目錄結構和文件命名標準是非常重要的。
在程序的根目錄,必須要有3個目錄,分別是Model, View 和 Controller。
與普通的ASP.NET程序一樣,這三個目錄之外,根目錄下面也必須有一個Global.asax文件和一個Web.Config文件。
Root [directory]
· Controller [directory]
o Controller CS files
· Models [directory]
o Model CS files
· Views [directory]
o View cshtml files
· Global.asax
· Web.config
(下面這張圖是老版本的MVC,但是基本思想是一致的)
ASP.NET MVC的運行生命週期
下面是一個MVC架構程序如何執行瀏覽器的請求。
下面圖形所涉及到的每一步執行的說明。
第一步,瀏覽器請求。
用戶在瀏覽器中,輸入一個網址:http://xxx.com/home/index/,這時候就產生一個瀏覽器請求。
第二步,Global.asax的作用,MVC路由。
這個網址將首先被Global.asax文件中的application_start()方法捕獲並解釋。從請求的網址中,將解釋出控制器,方法,和ID。
所以http://xxx.com/home/index/中,我們將得到:
l 控制器:home
l 方法:index()
l ID:空
例子:Global.asax文件中的application_start()方法的 RouteConfig.RegisterRoutes(RouteTable.Routes)方法解析出控制器,方法,和ID。
第三步,Controller層與調用方法。
現在MVC將在Controller目錄下查找home控制器的類。一個控制器類中包含不同的方法。
類中可以包含一個以上的方法,但是MVC只會請求從URL中解釋出來的方法,在這裏就是index()方法。
調用這個方法後,將返回純字符串或者將被VIEW層展示的HTML代碼。
注意命名,MVC查找Controller時查找的是Home+Ctroller名字的類。
例子:
注意方法名稱不能重複,下面這種寫法是錯誤的。只是爲了方便示例,放在了一起。
1.ActionResult Index()方法返回是一個view對象。
默認的網址返回的是Index方法,返回的是view文件夾下的home文件夾裏的index.cshtml頁面。
2. public string Index()方法返回的是一個string語句
3. public string Welcome(string name, int numTimes = 1)返回一個帶參數的string語句。
第四步,調用VIEW層。
調用VIEW將返回view()。調用VIEW層,將會訪問view目錄下指定的cshtml頁面,並且生成將要返回給瀏覽器的HTML代碼。
在這個例子中,控制器是home,方法是index()。所以調用view()將會從/views/home/index.cshtml中返回一個HTML代碼。
到這裏,整個執行流程結束。這就是一個MVC架構如何工作的。
註釋:
1. Controllers與view的對應關係
Controllers的名字對應view視圖中的文件夾的名字。
Controllers中的方法名對應相應的視圖。
所以一個control可以對應多個視圖。
2.view文件夾中的文件命名規則。
文件名第一個字符是下劃線“_”的文件代表是母版頁,佈局頁。不能用瀏覽器查看。
MVC默認從_ViewStart.cshtml開始。
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
代表佈局頁是_Layout.cshtml
_Layout.cshtml中的@RenderBody()將是顯示的內容(index頁面,或其他頁)。