十分鐘就能學(xué)會的ASP.NET MVC 5教程
ASP.NET MVC是在ASP.NET基礎(chǔ)上,應(yīng)用模型-視圖-控制器(Model-View-Controller,MVC)概念的Web框架。所謂的MVC,是一種軟件設(shè)計(jì)模式,目的是將邏輯代碼和界面代碼分開,提升代碼可維護(hù)性的技術(shù),包括以下幾個(gè)部分:
(1)模型:模型是界面數(shù)據(jù)的抽象表示,包括界面上的數(shù)據(jù)和對應(yīng)的操作邏輯。而對于這些數(shù)據(jù)如何表示,模型并不理會。
(2)視圖:視圖是呈現(xiàn)給用戶的界面,可以是HTML、WinForm等。模型從控制器接收來自模型的數(shù)據(jù)用以渲染。
(3)控制器:控制器接收視圖傳來的操作指令,調(diào)用操作所需的模型,根據(jù)結(jié)果渲染對應(yīng)的視圖。

相對于模仿WinForm的WebForm,MVC更符合網(wǎng)頁的結(jié)構(gòu),理解起來要更容易。
1??? ?工程結(jié)構(gòu)
ASP.NET MVC的工程結(jié)構(gòu)是定死的,如果不是這個(gè)結(jié)構(gòu),應(yīng)用就沒法執(zhí)行:
(1)首先必須得包含一個(gè)配置文件Web.config,并導(dǎo)入System.Web.Mvc程序集:
(2)包含一個(gè)主應(yīng)用程序文件Global.asax,其控制MVC路由。
(3)包含一個(gè)名為Controllers的文件夾,其下放置控制器類定義,名字必須都是xxxController。
(4)包含一個(gè)名為Views的文件夾,包含視圖文件,且必須位于對應(yīng)的控制器名文件夾下,比如DefaultController有一個(gè)名為Index的視圖,文件夾結(jié)構(gòu)就是Views/Default/Index.aspx。
2? 路由
從一個(gè)普通的ASP.NET程序變成一個(gè)MVC程序需要在Global.asax的Application_Start方法中注冊路由,代碼如下:
其創(chuàng)建了一個(gè)名為Default的路由表項(xiàng),內(nèi)容為"{controller}/{action}/{id}",這個(gè)內(nèi)容會被MVC程序集自動映射到指定的控制器。默認(rèn)路由為/Home/Index/。
3? 控制器
控制器定義全部位于controllers文件夾下,其所有的公有方法都對應(yīng)一個(gè)視圖。如果不想被視為視圖方法,需將方法修飾符改為protected或private;也可為方法添加NonAction屬性??刂破鞅仨毨^承自System.Web.Mvc.Controller類,視圖方法的簽名一般是
public ActionResult ViewName()
Controller類有一個(gè)名為View的靜態(tài)方法,能夠渲染指定的視圖。如果View方法沒有參數(shù),那么它返回ViewName.aspx對應(yīng)的視圖輸出。如有參數(shù),則第一個(gè)參數(shù)為希望輸出的視圖名稱,第二個(gè)可選參數(shù)為強(qiáng)類型視圖的模型。
4??? ?視圖
ASP.NET MVC的視圖是一個(gè)后綴名為aspx的模板??刂破髟谝晥D方法中,可以訪問一個(gè)名為ViewData的詞典,以向視圖中添加數(shù)據(jù)。視圖代碼如下所示:
可以在控制器中,根據(jù)用戶傳入的數(shù)據(jù),生成合適的視圖模型,渲染對應(yīng)的視圖。模型對象使用Model成員變量獲取引用。
注意,如果使用強(qiáng)類型視圖,必須在Views文件夾下面再放置一個(gè)web.config配置文件,內(nèi)容為:
如果要調(diào)用一些訪問時(shí)間很長的操作,必須使用異步以減少CPU占用。ASP.NET MVC 4及以上版本支持基于Task的異步操作,要求控制器必須繼承自AsyncController類,且視圖名稱的后面必須加上Async才能被識別,如:
6? RESTful
Controller有一個(gè)名為Json的靜態(tài)方法,可以將具有Serializable屬性的object對象序列化成JSON返回客戶端,從而構(gòu)建REST風(fēng)格服務(wù):