MVC是當前比較流行的WEB程式開發模式之一,ASP.NET MVC是.Net對MVC的一種實作,本文主要以一些簡單的小例子,簡述ASP.NET MVC的簡單應用,僅供學習分享使用,如有不足之處,還請指正,
MVC概述
MVC是當前比較流行的WEB程式開發模式之一,ASP.NET MVC是.Net對MVC的一種實作,MVC(Model View Controller 模型-視圖-控制器)具體如下所示:
- Model(模型)表示應用程式核心(比如資料庫記錄串列),
- View(視圖)顯示資料(資料庫記錄),
- Controller(控制器)處理輸入(寫入資料庫記錄),
MVC 分層有助于管理復雜的應用程式,因為您可以在一個時間內專門關注一個方面,例如,您可以在不依賴業務邏輯的情況下專注于視圖設計,同時也讓應用程式的測驗更加容易,MVC 分層同時也簡化了分組開發,不同的開發人員可同時開發視圖、控制器邏輯和業務邏輯,
什么是ASP.NET MVC?
ASP.NET MVC是.Net對MVC三層架構的一種實作方式,在.Net體系中,地位如下:

ASP.NET MVC專案創建
檔案-->新建-->專案,打開專案創建對話框,然后選擇ASP.NET Web應用程式(.NET Framework),點擊【下一步】,如下所示:

點擊【下一步】打開專案配置視窗,輸入專案名稱,和保存位置,然后點擊【創建】,如下所示:

點擊【創建】后,打開【創建新的Web應用程式視窗】,選擇MVC模板,然后點擊【創建】,如下所示:

稍等片刻,即可創建成功,通過模板創建的MVC程式,會自動創建對應的檔案夾和默認示例檔案,如下所示:

通過點擊工具列的【運行】按鈕或快捷鍵【F5】即可啟動Visual Studio自帶的IIS Express運行專案,如下所示,

然后在瀏覽器中打開,輸入網址 https:localhost:44310,默認框架模板創建的程式如下所示:

ASP.NET MVC默認路由配置
ASP.NET MVC的路由配置在RouteConfig.cs中,默認訪問url為{controller}/{action}/{id}的方式,如果為空默認controller為Home,默認action為Index,id為可選項,
即:https://localhost:44301/ 和 https://localhost:44301/Home/Index是等價的,默認配置可以修改,以適應實際業務的需要,

ASP.NET MVC的約定
在ASP.NET MVC中,流行【約定大于配置】的說法,即在同一個專案中,大家都按照同一種方式去開發,會使專案更易于維護,可讀性更高,同時簡化大量的配置,以提高作業效率,ASP.NET MVC中的約定,體現如下:
- 控制器的約定:
- 所有的Controller必須放到Controllers檔案夾中,并以【名稱+Controller】的方式命名,如:HomeController,
- 每個Controller都對應View中的一個檔案夾,檔案夾的名稱跟Controller名相同,如:Home,
- Controller中的方法名都對應一個View視圖(非必須,但是建議這么做)而且View的名字跟Action的名字相同,
- 控制器必須是非靜態類,并且要實作IController介面,默認繼承自Controller,
- Controller型別可以放到其他專案中
- 視圖的約定:
- 所有的視圖必須放到Views目錄下,
- 不同控制器的視圖用檔案夾進行分割,每個控制器都對應一個視圖目錄,
- 一般視圖名字跟控制器的Action相對應(非必須),
- 多個控制器公共的視圖放到Shared:例如公用的錯誤頁、串列模板頁、表單模板頁等等;
ASP.NET MVC模型創建
為了演示程式,首先創建模型類Student,在Models檔案夾-->右鍵-->添加-->類,如下所示:

在【添加新項】視窗中,選擇類,輸入名稱,點擊【添加】即可,如下所示:

Student模型類,創建成功后,如下所示:
1 namespace DemoMvc.Models 2 { 3 /// <summary> 4 /// 學生物體類 5 /// </summary> 6 public class Student 7 { 8 /// <summary> 9 /// 唯一標識 10 /// </summary> 11 public int id { get; set; } 12 13 /// <summary> 14 /// 姓名 15 /// </summary> 16 public string Name { get; set; } 17 18 /// <summary> 19 /// 年齡 20 /// </summary> 21 public int Age { get; set; } 22 } 23 }
ASP.NET MVC控制器創建
在controllers檔案夾-->點擊右鍵-->添加-->控制器,如下所示:

在打開的控制器創建對話框,選擇【MVC5 控制器 - 空】,點擊【創建】,如下所示:

彈出【添加控制器】對話框,輸入控制器名稱,點擊【添加】,如下所示:

控制器創建成功后,默認創建Index功能,并會自動在Views檔案夾下創建Student檔案夾,如下所示:

ASP.NET MVC視圖創建
在Student檔案夾-->右鍵-->添加-->視圖,打開【添加視圖】視窗,如下所示:

在【添加視圖】視窗,輸入視圖名稱,然后點擊【添加】如下所示:

視圖創建成功后,默認為Razor視圖,如下所示:
修改視圖,在視圖中添加如下代碼,和模型Student進行對應,如下所示:
1 @{ 2 Layout = null; 3 } 4 5 <!DOCTYPE html> 6 7 <html> 8 <head> 9 <meta name="viewport" content="width=device-width" /> 10 <title>Index</title> 11 <style type="text/css"> 12 input{ 13 width:100%; 14 height:33px; 15 } 16 17 </style> 18 </head> 19 <body> 20 <h1>學生基礎資訊</h1> 21 <form name="form1" method="post"> 22 <table width="400"> 23 <tr> 24 <td width="20%" >學號:</td> 25 <td width="80%" align="left"> 26 <input type="text" name="id" /> 27 </td> 28 </tr> 29 <tr> 30 <td >姓名:</td> 31 <td align="left"> 32 <input type="text" name="Name" /> 33 </td> 34 35 </tr> 36 <tr> 37 <td >年齡:</td> 38 <td align="left"> 39 <input type="text" name="Age" /> 40 </td> 41 </tr> 42 <tr> 43 <td colspan="2" align="center"> 44 <input type="submit" value="提交" style="width:30%" /> 45 <input type="reset" value="重置" style="width:30%" /> 46 </td> 47 </tr> 48 49 </table> 50 51 </form> 52 </body> 53 </html>
運行程式,在瀏覽器中輸入網址:【https://localhost:44310/Student/Index】,如下所示:

ASP.NET MVC資料傳遞
在ASP.NET MVC中,為了與用戶進行互動,資料需要從瀏覽器傳遞到后臺,經過業務處理后,再回傳給瀏覽器,呈現給用戶,具體流程如下所示:

本次主要分析如何將資料從View層傳遞到Controller層,及如何從Controller層傳遞到View層,那具體要如何傳遞資料呢?
View層傳遞到Controller層,可以通過以下幾種方式:
1. 通過內置物件Request進行獲取,如下所示:
1 public ActionResult SaveStudent() { 2 int id =Convert.ToInt32( Request.Params["id"]); 3 string Name = Request.Params["Name"].ToString(); 4 int Age = Convert.ToInt32(Request.Params["Age"]); 5 //Console.WriteLine(string.Format("id = {0},Name = {1},Age = {2}",id,Name,Age)); 6 return View("Index"); 7 }
除錯狀態下,可以查看從前臺獲取的值,如下所示:

2. 通過模型類Student進行獲取,即以模型類作為入參,前端傳遞的資料,會自動和模型類中的屬性進行匹配,如下所示:
1 public ActionResult SaveStudent2(Student student) 2 { 3 int id = student.id; 4 string Name = student.Name; 5 int Age = student.Age; 6 return View("Index"); 7 }
在除錯狀態下,可以查詢模型類中的屬性值,如下所示:

Controller層傳遞到View層,可以通過以下幾種方式:
1. 通過ViewData將資料從控制層傳遞到視圖層,
在控制層對ViewData進行賦值,如下所示:
1 ViewData["msg"] = "請先輸入學生資訊";
在視圖層獲取資訊并展示,如下所示:
1 <td colspan="2" align="center"> 2 <span style="color:red">@ViewData["msg"].ToString()</span> 3 </td>
運行起來,如下圖所示:

2. 通過ViewBag將資料從控制層傳遞到視圖層,如下所示:
在控制層對ViewBag進行賦值,如下所示:
1 ViewBag.msg = "請先輸入學生資訊";
在視圖層獲取資訊并展示,如下所示:
1 <td colspan="2" align="center"> 2 <span style="color:red">@ViewBag.msg</span> 3 </td>
示例效果和ViewData一致,ViewData和ViewBag對比差異,如下所示:

為何可以同時在控制層和視圖層使用ViewData和ViewBag呢?
通過查看代碼結構發現,ViewData和ViewBag屬于ControllerBase的屬性,

同時又是WebViewPage的屬性,如下所示:

所以個人猜測:在呼叫View()回傳視圖的時候,同時將ViewData和ViewBag進行了賦值,所以才可以在控制層和視圖層同時進行使用,
備注
以上是ASP.NET MVC快速入門介紹,旨在拋磚引玉,一起學習,共同進步,

作者:Alan.hsiang
出處:http://www.cnblogs.com/hsiang/
本文著作權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段宣告,且在文章頁面明顯位置給出原文連接,謝謝,
關注個人公眾號,定時同步更新技術及職場文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/373689.html
標籤:ASP.NET MVC
