《高山流水帶你一起學.Net MVC》分為大部分,第一部分基礎篇重點介紹Asp.NET MVC基礎知識、實操、技巧,以淺顯通俗的案例跟大家分享MVC如何快速入門;第二部分為項目應用篇,博主結合現有的開源軟件(MVC通用權限管理系統,源碼可下載)帶大家正式開發一套項目應用軟件。
第一篇 Asp.NET MVC 快速入門
前言:Asp.Net MVC 包括Moderls(數據模型,多數框架的模型即為數據庫的倉庫對應,也就是數據庫的表字段一一對應),Controller(控制器,完成業務處理,功能實現),View(視圖,前端展現,UI布局等)。本篇以實例的方式介紹MVC三者架構直接怎么配合使用(大俠繞步)。
MVC訪問順序(用戶訪問、控制器、模型、視圖之間的關系)如下圖:
學習目標:
1、如何創建MVC項目;
2、如何建立Models模型;
3、創建Controller控制器;
4、創建View視圖頁面;
5、使用ViewBag或ViewData實現在Contorller和View視圖之間傳遞Models的數據。
6、MVC快速入門的幾個小技巧
一、創建Mvc項目 以Vs2022 IDE為例,依次點擊創建新項目、Asp.NET應用程序、輸入項目名稱MvcDapperTest1,框架本例選擇4.8,點擊創建等待完成。
圖一
圖2
二、創建Models模型
操作方法:右鍵選擇Models文件夾,選擇添加 ->類 ,類的名稱為UserData.cs,代碼如下:
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Web; namespace MvcDapperTest1.Models { public class UserData { [Key, Column(Order = 1)] public int UserId { get; set; } public string UserName { get; set; } public string Password { get; set; } } }
三、創建Controller控制器
操作方法:右鍵選擇Controller文件夾,添加控制器名稱為HomeController(本篇以框架默認創建為例),代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MvcDapperTest1.Models; namespace MvcDapperTest1.Controllers { public class HomeController : Controller { public ActionResult Index() { ViewBag.UserName = "張三豐"; ViewBag.Age = "150"; ViewBag.Gender = 1; UserData userdatas = new UserData() { UserId = 11,UserName="李明",Password="123456" }; return View(userdatas); } } }
四、編寫View視圖頁面
操作方法:在View文件夾下面創建一個Home子文件夾,點擊右鍵選擇添加View頁面,頁面名稱為Index.cshtml
具體代碼如下:
@{ ViewBag.Title = "Home Page"; } @model MvcDapperTest1.Models.UserData <pre class="html" name="code"><html> <head> <meta name="viewport" content="width=device-width" /> <title>Test2</title> </head> <body> <div> 用戶名稱:<input type="text" id="UserName" name="UserName" value="@ViewBag.UserName" /></br> 年 齡:<input type="text" id="age" name="age" value=@ViewBag.Age /></br> 性 別:<input type="text" id="Gender" name="Gender" value="@ViewBag.Gender" /></br> <button>提交</button> <h2>以下是從模型中獲取數據,注意TextBox前面加For</h2> @Html.TextBoxFor(m => m.UserId) @Html.TextBoxFor(m => m.UserName) @Html.TextBoxFor(m => m.Password) </div> </body> </html>
運行界面如下:
五、MVC技巧匯總
.Net早期采用WebForm模式編程,風格類似WinForm采用事件驅動,偏離了請求->處理->響應Web訪問機制。MVC架構層次、路由訪問等更加成熟,因此初次學習MVC首先要接受它的開發思路和過程(當然想更深入“扒開”透徹了解MVC架構組成和運行機制,建議閱覽@深度訓練的文章https://www.cnblogs.com/wangiqngpei557/category/347651.html),其次快速掌握一些小技巧以便輕車上來,Let's go
技巧一:通過ViewBag(或者ViewData)從控制器向View視圖頁面傳遞數據
例如本帖中HomeController控制器,先實例化模型對象UserData userdatas = new UserData() { UserId = 11,UserName="李明",Password="123456" }; 在View頁面引用模型@model MvcDapperTest1.Models.UserData后,即通過
@ViewBag.UserName傳遞用戶名到View頁面,這里,也可以通過ViewData傳遞值。
另外,ViewBag和ViewData兩者主要區別如下:
1、ViewBag格式為ViewBag.*,ViewData格式為ViewData["*"]。
2、ViewBag的值為key/value字典集合,ViewData的值為dynamic類型對象。
3、ViewBag在View視圖頁面不需要類型轉換,而ViewData必須轉換對應的數據類型。
另外三種傳遞方式參考這篇文章(MVC3中 ViewBag、ViewData和TempData的使用和區別@https://www.cnblogs.com/bianlan/archive/2013/01/11/2857105.html)
技巧二:使用 FormCollection或者request控制器獲取View視圖中表單數據(Submit)
FormCollection便於單元測試: 對於Action進行單元測試時,使用FormCollection作為輸入參數,比Request.Form簡單,書寫如下代碼即可模擬一個FormCollection:
[csharp]view plaincopyprint?
varform=newFormCollection();
form.Add(“fieldName”,”fieldValue”);
Asp.net MVC在進行模型綁定時,會將用戶輸入綁定到FormCollection中,默認情況下,FormCollection中的內容與Request.Form一致,但是當我們自定義ModelBinder時,會影響FormCollection的取值,而Request.Form不會影響。這 樣如果我們在自定義ModelBinder時依舊使用Request.Form,自定義ModelBinder就毫無用處。
Request.form和Request.QueryString
1.Request.form方法,它是用來接收表單變量的(post 方法)
2.Request.QueryString方法, 它是接收URL參數的 (get 方法)
3.Request對象也可以不指明具體使用QueryString或是form方法,如request(“變量”),因為它能自動識別,不過還是指明為好,否則,要它自己判斷也得花些微時間,影響程序執行效率。Request:包含以上兩種方式(優先獲取GET方式提交的數據),它會在 QueryString、Form、ServerVariable中都搜尋一遍。
兩者除了接收方法不同外,還有傳遞數據量大小的問題,request.form方法能接收的數據沒有限制,而 request.QueryString只能接收數據量小於2KB數據,當然后者的執行速度要比前者快。一般往數據庫請求查詢時用 request.QueryString 方法,因為查詢時只不過那么幾個關鍵詞,沒有必要用request.form方法而導致查詢速度變慢。另外,request.QueryString方法還會把數據信息顯示在客戶端瀏覽器地址欄中,安全性較差。 request.form方法不存在上述問題,因此大量被應用在多個文本域提交數據和用戶登陸的場合(https://blog.csdn.net/qq_42717786/article/details/81701507)
public ActionResult Create(FormCollection form) { string name = form["name"]; //姓名 string mobile = form["mobile"]; //手機號 return View(); }
技巧三:Controller返回值類型,常見的如下表所示,具體用法參考本文HomeController
類名 | 抽象類 | 父類 | 功能 |
ContentResult | 根據內容的類型和編碼,數據內容. | ||
EmptyResult | 空方法. | ||
FileResult | abstract | 寫入文件內容,具體的寫入方式在派生類中. | |
FileContentResult | FileResult | 通過 文件byte[] 寫入文件. | |
FilePathResult | FileResult | 通過 文件路徑 寫入文件. | |
FileStreamResult | FileResult | 通過 文件Stream 寫入文件. | |
HttpUnauthorizedResult | 拋出401錯誤 | ||
JavaScriptResult | 返回javascript文件 | ||
JsonResult | 返回Json格式的數據 | ||
RedirectResult | 使用Response.Redirect重定向頁面 | ||
RedirectToRouteResult | 根據Route規則重定向頁面 | ||
ViewResultBase | abstract | 調用IView.Render() | |
PartialViewResult | ViewResultBase | 調用父類ViewResultBase 的ExecuteResult方法. 重寫了父類的FindView方法. 尋找用戶控件.ascx文件 | |
ViewResult | ViewResultBase | 調用父類ViewResultBase 的ExecuteResult方法. 重寫了父類的FindView方法. 尋找頁面.aspx文件 |
下面舉例說明GET訪問過程:
首先,在HomeCotroller中添加一個實例
[HttpGet] //此處也可以改為post方式訪問 public string get_test(string str) { return "Get到的字符串是:" + str; }
接下來在View中新建一個json文件,文件中輸入Js代碼如下:
"$.ajax(" { "type": "GET", "url": "/Home/get_test", "data": "str='", "+" "John+", "'", "success": "function(msg)", { "$('#lbl_show').text(data);" } }, ");"
運行程序:http://localhost:60559/Home/get_test?str=祖國你好!

技巧四:VS MVC快速開發常用快捷鍵
1、F12(Ctrl+減號、CTRL + SHIFT + 減號)
用法一、代碼編寫中經常用到F12快速定位父類或者一個函數的定義;
用法二、Web頁面中F12測試頁面腳本,例如Console打印輸出結果等。
2、F5運行程序,shift+F5停止運行
3、全屏:Shift+Alt+Enter
4、注釋程序:Ctr+K然后Ctr+C
5、矩形選中代碼:摁住alt鍵,然后拖動鼠標即可
6、折疊代碼Ctrl + M + O,展開代碼Ctrl + M + L
7、創建代碼區域,方便越多
#region
代碼區域
#endregion
技巧五:MVC中調試打印代碼為:System.Diagnostics.Debug.WriteLine("Hello World!")
Console.WriteLine()在MVC運行中無法輸出
總結:通過本文介紹,我們發現快速掌握.Net MVC並不難,重點了解它的架構以及基本的方法,適當了解一些開發MVC技巧有助於進一步快速開發MVC程序,跟着博主繼續下一篇,MVC訪問Sqlserver。