1.1 ASP.NET MVC 簡介 ASP.NET是一種構建Web應用程式的框架,它將一般的MVC(Model-View-Controller)模式應用於ASP.NET框架。 1.1.1 MVC模式簡介 MVC將應用程式的用戶界面(User Interface, UI)分為三個主要部分: 模型:一 ...
1.1 ASP.NET MVC 簡介
ASP.NET是一種構建Web應用程式的框架,它將一般的MVC(Model-View-Controller)模式應用於ASP.NET框架。
1.1.1 MVC模式簡介
MVC將應用程式的用戶界面(User Interface, UI)分為三個主要部分:
- 模型:一組類,描述了要處理的數據以及修改和操作數據的業務規則。
- 視圖:定義應用程式用戶界面的顯示方式。
- 控制器:一組類,用於處理來自用戶、整個應用程式流以及特定應用程式邏輯的通信。
MVC作為用戶界面模式
註意這裡的MVC指的是一種用戶界面模式。MVC模式是處理用戶交互的一種解決方案,它並不處理應用程式關註的其他問題,如數據訪問、服務交互等。
1.1.2 MVC在Web框架中的應用
MVC模式經常應用於Web程式設計中。在ASP.NET MVC中,MVC三個主要部分的定義大致如下:
- 模型:模型是描述程式設計人員感興趣問題域的一些類,這些類通常封裝存儲在資料庫中的數據,以及操作這些數據和執行特定域業務邏輯的代碼。在ASP.NET MVC中,模型就像使用了某種工具的數據訪問層(Data Access Layer),這種工具包括實體框架(Entity Framework)或者與包含特定域邏輯的自定義代碼組合在一起的NHibernate。
- 視圖:一個動態生成HTML頁面的模板。
- 控制器:一個協助視圖和模型之間關係的特殊類。它響應用戶輸入,與模型進行對話,並決定呈現哪個視圖(如果有的話)。在ASP.NET MVC中,這個類文件通常以尾碼名Controller表示。
註意 MVC是一種高級架構模式,它的使用取決於具體應用環境。ASP.NET MVC的上下文是問題域(一個無狀態的Web環境)和宿主系統(ASP.NET)。
ASP.NET MVC註重應用MVC模式來提供一個運行在.NET平臺上的強大Web開發框架,上下文則是其強大原因的一部分。
ASP.NET採用了大部分覬覦MVC的Web框架所使用的一些基本原則:
- 約定優於配置(convention over configuration)
- 不重覆(又名DRY原則)
- 儘量保持可插拔性(pluggability)
- 儘量為開發人員提供幫助,單必要時允許開發人員自由發揮。
1.2 ASP.NET MVC5概述
ASP.NET MVC5主要特性:
- One ASP.NET
- 新的Web項目體驗
- ASP.NET Identity
- Bootstrap模板
- 特性路由
- ASP.NET基架
- 身份驗證過濾器
- 過濾器重寫
1.2.1 One ASP.NET
在MVC5中,只有一種ASP.NET項目類型。在Visual Studio2013中創建新的Web應用程式時,沒有複雜的選項,只有Web應用程式。不只是在一開始創建ASP.NET項目時才支持這麼做:在不斷開發的過程中,可以添加對其他框架的支持,因為工具和特性都是作為NuGet包提供的。例如,如果開發過程中改變了想法,就可以使用ASP.NET基架向任何現有的ASP.NET應用程式添加MVC。
1.2.2 ASP.NET Identity
ASP.NET Identity的一些主要的新特性:
- One ASP.NET Identity系統:為了支持前面介紹的One ASP.NET這個關註點,新的ASP.NET Identity被設計為可在整個ASP.NET家族中使用。
- 控制用戶資料數據:ASP.NET Identity使得存儲額外的用戶信息很容易,只需要在代表用戶的模型類中添加屬性即可。
- 控制優於持久化:預設情況下,所有用戶信息都使用Entity Framework Code First存儲,所以可以獲得我們在使用Entity Framework Code First時已經習慣了的簡單性和控制。但是,也可以插入其他任何我們希望使用的持久化機制,包括其他ORM、資料庫、自定義的Web服務等。
- 可測試性:ASP.NET Identity API是使用介面設計的,所以允許為用戶相關的應用程式代碼編寫單元測試。
- 基於聲明:雖然ASP.NET Identity仍然支持用戶角色,但是也支持基於聲明的身份驗證。
- 登錄提供器:ASP.NET Identity並不是只關註用戶名/密碼身份驗證,而是也理解用戶經常通過社交服務-提供器和Windows Azure Active Directory進行身份驗證。
- NuGet分發:AP.NET Identity 作為NuGet包安裝到應用程式中。這意味著可以單獨安裝ASP.NET Identity,並且通過更新一個NuGet包,就可以把它升級到新版本。
1.3 安裝MVC5和創建應用程式
1.3.1 創建ASP.NET MVC5應用程式
創建一個新的MVC項目的步驟如下:
(1).選擇File|New Project選項。
(2).在New Project對話框左欄的Installed Templates部分,選擇Visual C#|Web模板列表,這件在中間欄顯示Web應用長須類型列表。
(3).選擇ASP.NET Web Application,將應用程式命名為MvcMusicStore,然後單擊OK按鈕。
1.3.2 New ASP.NET Project對話框
創建一個新的MVC5應用程式後,將會出現New ASP.NET Project對話框。該對話框列出了所有ASP.NET應用程式共有的一些選項:
- 選擇模板
- 添加框架文件夾和核心引用
- 添加單元測試
- 更改身份驗證
- Microsoft Azure
前兩個選項(Select a template和Add folders and core references for)共同起作用。模板選擇了一個起點,然後使用框架覆選框來添加對Web Forms、MVC和Web API的支持。這意味著我們可以選擇一個MVC模板,然後添加Web Forms支持,或者可以選擇空模板,添加對框架的支持。這種功能不止在創建新項目時可以使用:任何時候都可以添加對任意框架的支持,因為框架文件夾和核心引用是通過NutGet包添加的。
1.選擇一種應用程式模板
- MVC:MVC模板設置一個標準的、帶幾個視圖的Home Controller,配置站點佈局,並包含一個MVC特定的Project_Readme.html頁面。
- Empty:空模板會建立一個空的項目骨架。得到的文件包括一個web.config(包含一些預設的網站配置設置)和創建項目所需的幾個程式集引用,但是僅此而已。這個模板不會提供代碼,不包含JavaScript或CSS腳本,甚至不會提供一個動態地HTML文件。
- Web Forms:Web Forms模板為ASP.NET Web Forms開發發下基礎。
- Single Page Application:Single Page Application模板創建的應用程式主要通過JavaScript請求Web API服務驅動,而不是採用傳統的Web頁面請求/相應周期。最初的HTML由一個MVC Home Controller提供,其餘的伺服器端交互則有一個Web API控制器處理。次模板使用Knockout.js庫來幫助管理瀏覽器中的交互。
- Facebook:這個模板方便了構建一個Facebook“畫布”應用程式,也就是看上去托管在Facebook網站上的一個Web應用程式。
- Azure Mobile Service:Azure Mobile Service現在支持Web API服務,所以使用這個模板能夠比較容易地創建針對Azure Mobile Service的Web API。
2.測試
所有的內置項目模板都有一個選項,用來使用樣本單元測試創建單元測試項目。
3.配置身份驗證
可選擇身份驗證方法:
- No Authentication:用戶不需要身份驗證的應用程式,例如沒有管理單元的公共網站。
- Individual User Accounts:用於在本地存儲用戶配置文件的應用程式。支持用戶名/密碼賬號,以及社交認證提供程式。
- Organizational Accounts:用於通過某種形式的活動目錄進行身份驗證的賬戶。
- Windows Authentication:用於內部網應用程式
新MVC項目在應用程式的根目錄下包含Project_Readme.html文件。創建項目時間自動顯示這個文件。這是一個完全自包含的文件----所有的樣式都通過HTML樣式標簽包含進來,所以使用完該文件後可以刪除它。
1.4 ASP.NET MVC應用程式的結構
用VS創建了一個新的ASP.NET MVC應用程式後,將自動向這個項目中添加一些文件和目錄。
這些由VS添加的預設文件提供了一個可以運行的應用程式的基本結構,完整地包括了首頁、關於首頁、賬戶登錄/退出/註冊頁面以及一個未經處理的錯誤頁面(所有頁面彼此聯繫起來,可以直接使用)。
1.4.1 ASP.NET MVC和約定
預設情況下,ASP.NET MVC應用程式對約定的依賴性很強。這樣就避免了開發人員配置和指定一些項。
ASP.NET MVC的約定非常容易理解,下麵是預期的程式結構:
- 每個Controller類的名字以Controller結尾。
- 應用程式的所有視圖放在單獨的Views目錄下。
- 控制器使用的視圖實在Views主目錄的一個子目錄中,這個子目錄是根據控制器名稱來命名的。