[VS2010 Online]初窺ASP.NET MVC(1)

[VS2010 Online]初窺ASP.NET MVC(1)

image_thumb[1]

 

MVC這個設計架構大約是起始於1979年,由 Trygve Reenskaug 在 Smalltalk 上實作的一種design pattern。

當時他提出的這個理論內容可以參考「Thing Model View Editor」,後來在1988年,由 Glenn Krasner 以及

Stephen Pope 共同出版「A Cookbook for Using the Model-View-Controller User Interface Paradigm

in Smalltalk -80」論文,對當時MVC更有顯著的影響。

 

其實在 ASP.NET MVC 提出之前,在很多程式語言上都已經有實現 MVC 的架構,像是 JAVA、PHP、Ruby、Python等。

微軟在.NET Frameowork 3.5 SP1中,也提供了MVC的設計架構來讓網頁設計師能夠設計更具彈性的網頁。

 

為什麼我們要使用ASP.NET MVC?

在傳統 ASP.NET 網頁開發,設計者只要透過畫面拖拉物件,設定相關屬性,在對應的事件撰寫相關程式碼就

可以簡單地寫出一個 ASP.NET 應用程式。但是往往商業邏輯混和介面控制項的程式碼,再加上不小心的 ViewState 應用,往往效能以及測試上都會造成很大的麻煩,另外在維護以及擴充調整方面,彈性也不夠大。所以才有了 ASP.NET MVC 架構產生。

 

 

MVC架構指的是 Model、View 以及 Controller。

Model指的是用來顯示結果的資料來源,舉例來說,在Northwind資料庫中,Employees資料表就是一個Model。View則是

用來顯示資料的界面,而Controller則是接收 View 傳入的內容,用來改變Model的狀態,然後選擇對應的View來回傳要顯示的結果。

 

我們可以透過下圖來看整個執行的步驟:

 

image_thumb[110]

 

1. 使用者在瀏覽器中輸入網址,發出 Request,由 controller 接收這個 Request。

2. Controller 接收 Request 之後,向 Model 要求所需的資料。

3. Model 將符合的資料送給 Controller。

4. Controller 將數據送到 View (ex: aspx網頁)。

5. 然後 View 在顯示資料在使用者的瀏覽器中。

 

由這個圖看來,Controller 扮演了一個非常重要的角色。其實,在 ASP.NET MVC 裡,

撰寫 Controller 程式碼就是最重要的部份。

 

 

我們就 Step By Step 來看看 ASP.NET MVC:

1.

在 Visual Studio 2010 中開啟一個新的 ASP.NET MVC 2 Web Application。

 

2.

選擇不要建立測試專案:

image_thumb[111]

 

3.

整個專案的架構如下:

image_thumb[112]

 

Models目錄存放的是有關於 Model 的物件,像是Linq to SQL 或是 ADO.NET Entity Data Model。

Views目錄是存放網頁,像是 aspx 或是 ascx 等。

Shared目錄存放網頁所要共用的部份,像是 Site.Master 以及 ascx。

Controllers目錄則是放置 Controller 物件,這裡命名都採用 XXXController(XXX可以根據View的功能性決定)

 

 

4.

按下 F5 執行,顯示的畫面如下:

image_thumb[113]

 

6.

按下 About 連結,你會看到 URL 會這樣切換。

image_thumb[114]

 

 

在此有一個小插曲,筆者的 VS2010 此時預設以 FireFox 開啟,但是在 ASP.NET MVC  中,

你會發現要去切換瀏覽器,會找不到選項:

image_thumb[115]

 

此時只要新增一個 aspx 網頁,就可以透過它來切換瀏覽器:(換完再砍掉)

image_thumb[116]

 

 

7.

接下來,我們看到 Global.asax.cs,其中定義了整個 MVC 專案的 URL 路由(route)以及路由邏輯。

image_thumb[117]

 

 

IgnoreRoute這裡是去設定要忽略的 URL 路由。MapRoute則是去設定要如何對應 URL 路由。

我們可以看到程式碼中預設路由名稱為 Default,URL 路由的規則為{controller}/{action}/{id},

預設參數則是為 controller = "Home", action = "Index", id = ""。

 

 

我們再透過一個 CRUD 的例子來瞭解 ASP.NET MVC:

1.

首先,建立一個 ADO.NET Entity Data Model(這邊我們以北風資料庫為範例):

image_thumb[118]

 

選擇 Generate from Database。

image_thumb[119]

 

設定資料來源:

image_thumb[120]

 

選擇 Categories,然後按下完成:

image_thumb[121]

 

2.

我們可以看到預設的 HomeController 內容如下:

image_thumb[122]

 

我們另外新增一個 MyIndex 的 Action:

image_thumb[123]

 

請先 Build 專案,然後,我們在 Index 上按下滑鼠右鍵,選擇Add View:

image_thumb[125]

 

設定下列選項,然後按下Add:

image_thumb[126]

 

然後就會產生 MyIndex.aspx 網頁:

image_thumb[127]

 

在 Site.Master 檔案中加入:

image_thumb[128]

 

按下F5執行,並切換到 MyIndex 頁籤時顯示的內容:

image_thumb[129]

 

3.

再加入編輯的程式碼如下:

image_thumb[130]

這裡的 AcceptVerbs 屬性設定了 HttpVerbs.Get 及 HttpVerbs.Post,這代表設定這個標籤的

action 去分別處理 HTTP GET 以及 HTTP Post。

 

同樣地去新增View

image_thumb[131]

 

設定的內容:

image_thumb[132]

 

產生的 edit.aspx 網頁內容:

image_thumb[133]

 

按下 F5 執行,當你在剛剛的列表中按下 Edit 時,會切換到對應的編輯畫面:

image_thumb[134]

 

 

4.

加入 Create 的程式碼:

image_thumb[135]

 

建立View:

image_thumb[136]

 

當建立好 Create.aspx 網頁時,按下 F5 執行,然後選擇 Create New:

image_thumb[137]

 

這裡看完應該會覺得有點怪,因為 CategoryID 是自動編號,不需要顯示。

我們可以在 Create.aspx 中作調整,寫入紅框內的程式碼:

image_thumb[138]

 

畫面就會變成這樣:

image_thumb[139]

 

5.

加入 Details 的程式碼:

image_thumb[140]

 

新增 View 的設定:

image_thumb[141]

 

 

當產生 Details.aspx 網頁後,按下 F5 執行,並切換到 Category 列表時,按下 details 連結就會產生下圖:

image_thumb[142]



6.

接下來 Delete 這部份就比較不一樣,因為在剛剛產生 View 的選項中沒有 Delete 的項目,

另外,當你要刪除一筆資料時,是不會再產生一個畫面來處理。

所以我們可以這樣作:

 

新增刪除的程式碼:

image_thumb[143]

 

然後在 MyIndex.aspx 中新增:

image_thumb[146]

 

按下 F5 試看看刪除功能:

image_thumb[147]

 

 

這樣整個 CRUD 功能一下子就完成了,是不是很方便呢?

針對 ASP.NET MVC 還有一些進階的東西可以讓我們更瞭解如何使用,這個我們留待後面篇幅再說明。

 

試煉大會,我們下次見囉~~

 

 

參考資料:

http://c2.com/cgi/wiki?ModelViewControllerHistory

 

 

如果您有微軟技術開發的問題,可以到MSDN Forum發問。

如果您有微軟IT管理的問題,可以到TechNet Forum發問喔。