ASP.NET MVC 2程式開發

《ASP.NETMVC2程式開發》是2011年電子工業出版社出版的圖書,作者是黃保翕、陳酉玫、李楊。

內容簡介

《asp net mvc 2開發實戰》以循序漸進的方式揭開asp net mvc的神秘面紗,幫助開發人員將現有的asp net web forms項目轉移到asp net mvc架構,引導讀者建立正確的開發觀念,並搭配visual studio 2010開發工具,帶領讀者體驗asp net mvc的強大魅力。

《asp net mvc 2開發實戰》主要分成3篇。基礎觀念篇介紹了開發人員在學習asp net mvc之前需要了解的技術和觀念,以及mvc架構的基礎知識。技術講解篇針對asp net mvc 2的各項開發技術進行解析,以幫助開發人員解決實際問題。開發實踐篇通過一套完整的留言板系統案例詳述asp net mvc 2的開發技巧與流程,以及asp net mvc的安裝部署和單元測試方法。

《asp net mvc 2開發實戰》適合對mvc架構感興趣的asp net開發人員閱讀。

作譯者

黃保翕(Will保哥)微軟最有價值專家(MVP);擅長各種Web解決方案、大中型網站架構、資料庫系統、網站內容管理系統的設計;也是網路知名的技術專家,部落格“The Will Will Web”目前已經累積近千篇文章,提供Web相關技術的實用解決方案。

目錄

《asp net mvc 2開發實戰》

第1篇 基礎觀念篇

第1章 在學習asp net mvc之前 2

1 1 何謂mvc 3

1 1 1 何謂model 3

1 1 2 何謂view 4

1 1 3 何謂controller 5

1 2 mvc架構初探 6

1 2 1 關聯性 6

1 2 2 獨立性 7

1 3 為什麼要使用asp net mvc 8

1 3 1 分解關注點與可維護性 8

1 3 2 開放性與社區支持 9

1 3 3 開發工具與開發效率 10

1 3 4 易於測試的架構 10

1 3 5 易於分工的架構 11

總結 11

第2章 建立正確的開發觀念 12

2 1 分解關注點 13

2 2 以習慣取代配置 13

2 3 對開發asp net mvc項目的建議 14

2 4 asp net mvc中常見的問題 18

總結 25

第3章 新手上路初體驗 26

3 1 認識visual studio 2010 27

3 1 1 解決方案資源管理器視窗 27

3 1 2 伺服器資源管理器視窗 27

3 1 3 工具箱視窗 27

3 1 4 輸出視窗 28

3 1 5 錯誤列表視窗 28

3 1 6 擴充管理器 29

3 1 7 代碼段管理器 29

3 2 創建第1個asp net mvc項目 30

3 2 1 用asp net mvc 2項目模板創建項目 30

3 2 2 創建數據模型 38

3 2 3 創建控制器和動作 41

3 2 4 創建視圖 42

3 2 5 在視圖中創建視窗 44

3 2 6 通過action接收視窗數據 46

3 2 7 實現留言顯示功能 49

3 3 學習mvc時的注意事項 53

3 3 1 了解不同的項目類型 53

3 3 2 初學者常犯的錯誤 53

3 3 3 小心使用request對象和response對象 54

3 3 4 不要在視圖中編寫過多的程式邏輯 54

3 4 改良asp net mvc項目 55

3 4 1 使用視圖數據模型 55

3 4 2 使用視窗驗證功能 58

3 4 3 避免用戶重複傳送信息 65

總結 68

第2篇 技術講解篇

第4章 網址路由與asp net mvc的生命周期 70

4 1 網址路由 71

4 1 1 比對通過瀏覽器傳來的http請求 71

4 1 2 將適當的網址返回瀏覽器 71

4 1 3 默認網址路由 71

4 2 http請求的url如何對應網址路由 73

4 2 1 網址路由範例 73

4 2 2 為網址路由加上限制條件 75

4 3 網址路由如何在asp net mvc中生成網址 76

4 4 asp net mvc的執行生命周期 81

4 4 1 網址路由比對 81

4 4 2 執行controller和action 83

4 4 3 執行view並返回結果 86

總結 87

第5章 用model創建數據模型 88

5 1 model的任務 89

5 2 創建基礎數據模型 89

5 2 1 用linq to sql自動創建數據模型 90

5 2 2 用entity framework自動創建數據模型 93

5 2 3 手動創建數據模型 98

5 3 擴充基礎數據模型 99

5 3 1 定義model的metadata 100

5 3 2 自定義metadata驗證屬性 104

5 4 實現庫模式 104

總結 106

第6章 剖析controller的相關技術 107

6 1 controller的責任 108

6 2 controller的類與方法 108

6 3 controller的執行過程 109

6 4 動作名稱選取器 111

6 5 動作方法選取器 112

6 5 1 nonaction屬性 113

6 5 2 httpget屬性、httppost屬性、httpdelete屬性和httpput屬性 113

6 6 actionresult類 114

6 6 1 viewresult類 115

6 6 2 partialviewresult類 117

6 6 3 emptyresult類 117

6 6 4 contentresult類 118

6 6 5 fileresult類 119

6 6 6 強制下載檔案時需注意中文檔案名稱的問題 122

6 6 7 javascriptresult類 124

6 6 8 jsonresult類 124

6 6 9 redirectresult類 126

6 6 10 redirecttoroute類 126

6 7 viewdata與tempdata概述 128

6 7 1 viewdata 128

6 7 2 tempdata 129

6 8 模型綁定 131

6 8 1 簡單模型綁定 131

6 8 2 使用formcollection類獲取視窗數據 132

6 8 3 複雜模型綁定 132

6 8 4 多個複雜模型的綁定 134

6 8 5 判斷模型綁定的結果 136

6 8 6 使用bind屬性限制可被更新的model屬性 138

6 9 動作過濾器 141

6 9 1 授權過濾器屬性 142

6 9 2 動作過濾器屬性 145

6 9 3 結果過濾器屬性 147

6 9 4 異常過濾器屬性 149

6 9 5 自定義動作過濾器屬性 150

總結 152

第7章 view的相關技術 153

7 1 view的責任 154

7 2 不要用asp的觀念來編寫asp net mvc程式 154

7 3 view如何從action中獲取數據 154

7 3 1 如何正確分配view 155

7 3 2 使用弱類型模型獲取數據 156

7 3 3 使用強類型模型獲取數據 157

7 4 html輔助方法 158

7 4 1 如何使用html輔助方法 158

7 4 2 html輔助方法的套用實例 160

7 4 3 強類型輔助方法 165

7 4 4 dynamic data對asp net mvc的支持 166

7 4 5 url輔助方法 167

7 4 6 ajax輔助方法 169

7 4 7 自定義html輔助方法 170

7 4 8 tagbuilder類詳解 173

7 5 masterpage模板 176

7 6 部分視圖 178

7 6 1 什麼是部分視圖 178

7 6 2 如何創建一個部分視圖 179

7 6 3 如何調用部分視圖 180

7 6 4 部分視圖的高級套用 181

7 6 5 用renderaction() 方法載入部分視圖 184

總結 185

第8章 area的相關技術 186

8 1 何時需要使用area切割網站 187

8 2 如何在現有項目中新建area 188

8 3 如何設定area的網址路由 189

8 4 默認路由與area路由的優先權 190

8 5 就算使用area,controller的名稱還是有衝突的 190

8 6 如何指定默認網站與area網站的連線 191

總結 192

第3篇 開發實踐篇

第9章 mvcguestbook高級實戰 194

9 1 分析需求與創建網站雛形 195

9 1 1 規劃資料庫結構 195

9 1 2 創建基礎數據模型 196

9 1 3 規劃網站功能 196

9 1 4 設計controller與action 197

9 1 5 創建基礎頁面 200

9 2 實現會員機制 201

9 2 1 會員註冊機制 201

9 2 2 會員登錄/註銷功能 212

9 3 實現留言機制 219

9 3 1 編寫留言列表 219

9 3 2 新建留言列表頁面 221

9 3 3 為留言列表添加分頁功能 222

9 3 4 編寫會員留言功能 225

9 3 5 編寫會員留言視圖 228

9 3 6 編寫版主回復功能 228

9 3 7 創建版主回復視圖 230

9 3 8 編寫刪除留言功能 231

9 4 實現動作記錄機制 232

9 4 1 編寫actionlogattribute動作過濾器屬性 232

9 4 2 將屬性套用到action 233

9 5 強化model的結構 233

9 6 使用控制反轉容器 248

9 6 1 asp net mvc與autofac的集成 250

9 6 2 asp net mvc與autofac集成的原理 252

9 6 3 讓autofac自動解析接口和對應的類 252

9 6 4 修正controller的構造符 255

總結 256

第10章 asp net mvc開發技巧 257

10 1 asp net mvc的多語系支持 258

10 2 在http回響標題中隱藏asp net mvc的版本 261

10 3 一起編譯visual studio和view 262

10 4 mvchtmlstring類的開發技巧 265

10 5 在mvc與web forms之間傳遞數據 267

10 5 1 http get方法(querystring集合)和http post方法 267

10 5 2 session 267

10 6 如何調試asp net mvc原始碼 268

10 6 1 使用 net framework原始碼逐步調試功能 268

10 6 2 下載asp net mvc原始碼並添加項目參考 273

10 7 使用visual studio程式模板進行快速開發 279

10 7 1 如何使用程式模板快速生成view 279

10 7 2 如何將內置的程式模板添加到項目中 280

10 7 3 如何修改內置的addcontroller程式模板並自動生成程式代碼 283

10 7 4 如何新建自定義的addview程式模板並自動生成程式代碼 284

10 7 5 深入t4程式生成器 287

總結 287

第11章 安裝部署 288

11 1 如何將網站部署到本地iis中 289

11 2 如何部署遠程iis 294

11 3 如何用命令提示符手動部署 296

11 4 部署asp net mvc時常見的問題 299

11 4 1 無法載入檔案或組件 299

11 4 2 部署到iis 6之後看不到網頁 300

11 4 3 部署到iis 6或iis 7之後都無法使用網站 302

11 5 部署asp net 4 0時的注意事項 304

11 5 1 安裝時的注意事項 304

11 5 2 安裝正確的 net framework包 304

11 5 3 應用程式集區不能跨 net版本設定 305

總結 305

第12章 單元測試 306

12 1 關於軟體測試 307

12 1 1 何謂單元測試 307

12 1 2 何謂集成測試 308

12 1 3 如何區別單元測試與集成測試 309

12 1 4 何謂測試驅動開發 309

12 2 創建asp net mvc的單元測試項目 311

12 2 1 單元測試項目的命名規則 311

12 2 2 新建項目時自動創建單元測試項目 311

12 2 3 通過單元測試嚮導創建單元測試項目 313

12 2 4 在controller類中創建單元測試項目 315

12 3 如何編寫asp net mvc單元測試 315

12 3 1 單元測試的3a模板 316

12 3 2 編寫controller單元測試 316

12 3 3 在visual studio中執行單元測試程式 319

12 3 4 查看程式代碼涵蓋範圍 320

12 3 5 編寫適合進行單元測試的程式代碼 323

12 3 6 使用stub假對象完成單元測試 325

12 3 7 使用mock假對象完成單元測試 327

12 3 8 編寫routing單元測試 330

總結 332

前言

在開始學習ASP NET MVC之前,我想許多讀者心中應該都有疑惑,尤其是正宗的ASP NET Web Forms開發者,更可能會對ASP NET MVC技術給予異樣的眼光甚至誤解。

《ASP NET MVC 2開發實戰》分為3篇,以循序漸進的方式揭開ASP NET MVC的神秘面紗,引導讀者建立正確的觀念,實際體驗ASP NET MVC的強大魅力。

建議閱讀順序:

第1篇→第2篇→第3篇:想按部就班學習ASP NET MVC的人。

第1篇→第3篇→第2篇:想先感覺程式,再建立觀念的人。

第3篇→第1篇→第2篇:懶得閱讀文字,只想看程式代碼的人。

第1篇 基礎觀念篇

第1章 在學習ASP NET MVC之前

本章將介紹ASP NET MVC的基礎知識,幫助你了解ASP NET MVC的概況。由於本章內容著重於觀念的講解,如果覺得看不懂,可先跳過,待將讀完後續的章節之後再回頭閱讀,或許更能幫助你建立正確的觀念。

第2章 建立正確的開發觀念

本章主要說明使用ASP NET MVC進行網站開發時應有的正確觀念。強大的工具若沒有正確的觀念支持,就像是給你一台馬力強又省油的手動擋汽車,而你卻不知道離合器應該如何使用一樣——也許當你嘗試了一段時間,覺得車子還是開不快時,就會提前放棄一部好車。本章的最後也整理了一些初學者在學習ASP NET MVC時經常會問的問題,並逐一進行回答。

第3章 新手上路初體驗

本章介紹如何利用Visual Studio 2010創建一個ASP NET MVC項目,讓讀者親身體驗ASP NET MVC實際開發的完整過程。相信在逐步教學的帶領之下,能讓現有的ASP NET Web Forms開發人員了解其與ASP NET MVC開發的差異,進而快速上手。

第2篇 技術講解篇

第4章 網址路由與ASP NET MVC生命周期

想要掌握ASP NET MVC,最重要的是要了解網址路由(Routing)與ASP NET MVC生命周期的重要概念。網址路由在ASP NET MVC中有兩個用途:一個用途是比對通過瀏覽器傳來的HTTP請求,並將其對應到適當的控制器(Controller)與動作(Action)中進行處理;另一個用途是決定ASP NET MVC應該輸出什麼樣的網址來回響瀏覽器。雖然跳過本章你仍然可以成功地創建ASP NET MVC網站,但閱讀本章能幫助你理解ASP NET MVC執行時的順序,進而減少犯錯的機會。

第5章 用Model創建數據模型

在用ASP NET MVC開發網站的過程中,通常模型(Model)是整個項目中首先要開發的部分,所有需要進行數據訪問的地方都仰賴模型提供服務。本章將講解如何通過Visual Studio 2010自動建立數據模型以及手動建立和查看數據模型,並通過部分類的輔助方法實現基本的欄位驗證,甚至完成商業邏輯驗證,最後通過實現庫模式(Repository Pattern),讓ASP NET MVC項目更易於進行單元測試與測試驅動開發(Test-Driven Development,TDD)。

第6章 剖析Controller的相關技術

ASP NET MVC的核心就是Controller,它負責處理瀏覽器傳來的所有請求並決定回響的內容。但Controller並不負責決定如何顯示內容,而是僅將特定類的內容回響給ASP NET MVC框架。視圖(View)才是決定回響內容的重要角色。本章也會套用第2章提及的“分解關注點”、“以習慣取代配置”、“不要重複你自己”等觀念,帶你邁入ASP NET MVC的殿堂,發現ASP NET MVC的核心之美。

序言

筆者目前任職於多奇數位創意有限公司,擔任技術總監一職,負責公司技術方向的決策。大約在兩年多前,我開始注意到,ASP NET MVC技術在國外漸漸發展起來。起初,我並不覺得它有什麼特別的地方,但慢慢看到一些國外對ASP NET MVC的開發觀念與設計方法的討論——好像它真的能夠解決當時ASP NET Web Forms開發上的難點,例如內置的控制項不好用、控制項套版不易、抽象的ASP NET Web Forms事件模型經常讓新手搞不清楚狀況、過大的ViewState等,而這些都是我們在日常開發工作中會遇到的問題。

直到2009年初,ASP NET MVC 1 0正式版上市,除了還在創建與維護中的ASP NET Web Forms項目不會改動之外,我毅然決然地帶領公司的所有開發人員投入ASP NET MVC的懷抱,並宣布未來所有新項目皆以ASP NET MVC技術為主。這是一個重大的決定,也是一個我至今未曾後悔的決定。對我來說,學習一門全新技術的動機很重要。當你因為接觸一門新技術而必須要放棄許多以往的開發經驗時,如果沒有明確的動機並發現轉變的價值,是很難下定決心的。因此,要進入一個全新的技術領域,首先要感受技術的價值,然後是進一步研究技術的細節。

本書的寫作歷時一年多的時間,在這段時間裡,ASP NET MVC的版本也從ASP NET MVC 1 0升級到了ASP NET MVC 2 0。由於ASP NET MVC的觀念與架構十分優秀、嚴謹,因此,技術升級的過程非常順利,而且開發觀念也不需要重新建立。對開發人員來說,即使升級至ASP NET MVC 2 0,在學習上也沒什麼負擔。即便是未來的ASP NET MVC 3 0,微軟的ASP NET MVC開發團隊也能保證它會與ASP NET MVC 1 0兼容,早期編寫的程式完全可以順利轉移。新版本的ASP NET MVC只會繼續在同一套架構上增強功能,並強化對Visual Studio 2010的支持。因此,筆者認為,ASP NET MVC在未來非常具有可發展性。

筆者曾經想過,我們公司會不會是台灣地區唯一一個只使用ASP NET MVC技術開發網站項目的公司呢?不過,這並不是重點,重點是我們現在創建的網站不但更加安全、開發速度更快、項目生成和完成的時間更短,最重要的是,網站變得易於維護,質量也更高了,這都要歸功於ASP NET MVC的技術架構。因為ASP NET MVC非常強調“分解關注點”的觀念,而且從開發架構上來看,也很容易讓開發人員做到“分解關注點”,這個優勢是ASP NET Web Forms完全無法匹敵的。

本書集結了筆者在學習與開發ASP NET MVC時的經驗與心得,希望能帶給所有 NET開發人員一個全新且優秀的選擇。讓我們一起擁抱ASP NET MVC的世界吧!

能夠順利出版這本書,我要感謝很多人。首先,最感謝的是我的ASP NET MVC開發團隊,在公司里,他們寫的Code比我寫的字還多出很多很多,本書涉及的很多開發技巧與學習心得都來自於他們。除此之外,Demo、Thomsen、Danny、Bibby協助我撰寫了部分章節,星寂、Jerry幫我完成了許多範例程式。我還要感謝幫我校稿與驗證範例程式的朋友們,如果沒有他們的協助,這本書恐怕很難完成。

同時,也非常感謝悅知文化的編輯Vicky,在我寫作的過程中提供了許多的協助並給予我包容,因為我從來就沒有按照“寫作說明”寫作文章,即便要出書,也還是覺得寫部落格的心情與角度比較符合我的風格。

這是我寫的第一本書,如果讀者對書中的內容或觀念有任何不理解的地方,歡迎到我的部落格、Facebook冬粉專頁或噗浪(Plurk)上與我交流、互動。

黃保翕(Will保哥)

相關詞條

相關搜尋

熱門詞條

聯絡我們