VS2010

转自 http://www.dotblogs.com.tw/lolota/archive/2010/03/20/14132.aspx

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架構指的是 M odel、V iew 以及 C ontroller。

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 發問喔。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值