在用Asp.Net MVC寫這個Hello World之前,先來聊一下這個MVC到底是什么東西!
MVC是一種模式,是一種軟件的構架模式。它把軟件系統分為三個部分:模型(Model),視圖(View)和控制器(Controller)。MVC模式的目的是實現一種動態的程序設計,使后續對程序的修改和擴展簡化,並且使程序某一部分的重復利用成為可能。除此之外,此模式通過對復雜度的簡化,使程序結構更加直觀。軟件系統通過對自身基本部份分離的同時也賦予了各個基本部分應有的功能。
模型(Model),視圖(View)和控制器(Controller)簡稱"MVC",它們之間的關系如下圖1.
圖1.
模型(Model) “數據模型”(Model)用於封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法。“模型”有對數據直接訪問的權力,例如對數據庫的訪問。“模型”不依賴“視圖”和“控制器”,也就是說,模型不關心它會被如何顯示或是如何被操作。但是模型中數據的變化一般會通過一種刷新機制被公布。為了實現這種機制,那些用於監視此模型的視圖必須事先在此模型上注冊,從而,視圖可以了解在數據模型上發生的改變。
視圖(View) 視圖層能夠實現數據有目的的顯示;在視圖中一般沒有程序上的邏輯。為了實現視圖上的刷新功能,視圖需要訪問它監視的數據模型(Model),因此應該事先在被它監視的數據那里注冊。
控制器(Controller) 控制器起到不同層面間的組織作用,用於控制應用程序的流程。它處理事件並作出響應。“事件”包括用戶的行為和數據模型上的改變。
所以圖1就可以延伸為下圖2.的形式。
圖2.
MVC的描述就先到這里吧!我們還是用它給大家打個招呼吧!MVC自問世至今也有經歷了N次變身了!1.0的版本BUG太多了,相對也不成熟,不穩定。到時2.0的時候就好很多了,但是還是殘留一點的不足,還是很有很多問題,首先滿頁面的<%%>就讓很多人感覺不爽了!到了3.0的時候那就相對完美很多了,出了新的Razor引擎寫法對程序員來說友好很多了!如果是新手,我建議從3.0一起學習吧!當然還有大家一起期待的4.0版本,目前還在內測(Beta)狀態,相對3.0則是更加強大了。
當然學習3.0還是要感謝許多前人為我們寫了不少的文章,供我們新手學習,因為現在針對Asp.Net MVC的資料還是甚少,可見園子上那些前人是付出多少心血為了讓我們學習新的東西,在此深表感謝。
新建項目Asp.Net MVC 3 Web應用程序,如圖3.
圖3.
當點擊創建之后,進圖如下圖4的選項框。
圖4.
我們當然選擇視圖引擎為Razor的引擎了,因為我們只需要它給我們說一句簡單的話,也就不需要創建單元測試項目了(要是大的項目這個還是需要的)。我們創建一個空的項目,創建完成后VS會自動為我們配置好環境如下圖5.
圖5.
創建完成后直接運行,肯定是404,因為項目是空的,我們也沒有給里面加什么東西。
在MVC里處理請求的是Controllers,在Asp.Net Mvc中,Controllers都是簡單的C#類(通常繼承了System.Web.Mvc.Controller基類),在Controllers中每一個public Method稱為Action Method,這意味着你可以通過URL來調用它。MVC約定:將所有的controllers放在一個名字為Controllers的文件夾下(MVC處處體現着約定勝於配置)。
既然這樣,我們添加一個Controller吧!添加如下圖6.
圖6.
圖7.
添加一個HomeController的到Controlles文件夾下,如上圖7.
在HomeController里面寫代碼吧!

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace Hello_Asp.Net_Mvc.Controllers { public class HomeController : Controller { public string Index() { return "Hello World"; } } }
這次有東西,運行一下看看。跑起來的結果如圖8.
圖8.
但是在MVC里面我們是要好好的理解一下路由:MVC程序也使用了ASP.NET Routing決定URL怎樣映射到實際的Controller和Action上的過程。
當我們創建好MVC項目完成后,就已經添加好了默認的路由。
所以當你輸入一下三種方式的時候,默認路由會把你的請求引導到HomeController(控制器)里的Index Action(方法)上來;
- /
- /Home
- /Home/Index
既:我們輸入http://locahost:xxxx/或者http://locahost:xxxx/Home或者http://locahost:xxxx/Home/Index都會得到"Hello World"!
我們也可以在Global.asax上自己定義路由規則。上面的Index方法返回的是字符轉,如果要對瀏覽器響應一個HTML頁面,就需要我們創建View(視圖)了。
那修改一下HomeController里的Index方法,

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace Hello_Asp.Net_Mvc.Controllers { public class HomeController : Controller { public ViewResult Index() { ViewData["Message"] = "Hello World!"; return this.View(); } } }
代碼解釋:ViewResult表示一個類,該類用於使用由 IViewEngine 對象返回的 IView 實例來呈現視圖。
然后我添加一個視圖進來,在我們修改的HomeController的Index(Action)方法上右鍵,選擇添加試圖,如下圖9.
圖9.
然后會出現如圖10的選項框,直接點擊添加。下圖10.
圖10.
這個時候VS會自動完成在Views文件夾下創建View文件夾並且創建好Index.cshtml視圖引擎文件。如下圖11.
圖11.
然后搞完這個Index.cshtml頁面,讓他以相應HTML的方式給我們展示"Hello World"吧!
Index.cshtml的代碼如下:
@{ ViewBag.Title = "Asp.Net Mvc Index"; } <h2>@this.ViewData["Message"]</h2>
寫完,我運行一下程序,看看結果如圖12.
圖12.
到這里"Hello World!"已經說出來,o(∩_∩)o 新手自己動動手吧!
補充一點哈:就是我們視圖(View)的名字跟控制器(Controller)里的方法(Action)的名字一樣,所以路由會自動去呈現View的名字為Index的HTML給瀏覽器;方法(Action)的返回類型統稱為
ActionResult,這里具體到ViewResult.
呵呵!新人可以試試其他的返回類型玩玩,學習學習,認識認識!由於本人也是新人,要是那里描述有錯誤還是寫錯的地方,請大家多多指教,大家共同學習!