基本介紹
內容簡介
來自.NET專家的權威指南
在微軟平台上構建最可維護、與標準兼容,且能最佳運行的Web應用程式
獲得對ASP.NET MVC 4,包括MVC模式的堅實理解
詳細考察整個ASP.NET MVC框架
明白MVC應用程式以及測試驅動開發的實際工作機制
通過經典ASP.NET與ASP.NET MVC的特性對比,快捷評估你已有知識的價值
提供了一種與ASP.NET的所有優勢整合在一起的高生產率編程模型,該模型提倡更整潔的代碼架構、測試驅動開發,以及強大的可擴展性。
作者簡介
作者Adam Freeman,目睹了ASP.NET MVC自第一版以來的成長。Adam十五年前就開始設計並建立Web應用程式,曾負責過一些世界級的最大型且最引人注目的項目。著名的暢銷書作者!
媒體推薦
如果你讀過以前的版本,你會感到這本書很容易上手,就像在家裡開發一個 SportsStore程式一樣,本書專注於創建 MVC 4 Web ,
它好編輯,並且實際上可以隨書編寫代碼。
在以前的版本,它支持可選的單元測試,但不是使用測試驅動開發。
這本書面向基層的 Visual Studio 速成版,這本書可以幫你開發穩定的Web套用,祝你好運!
亞馬遜讀者
我算是Adam Freeman的崇拜者。在閱讀中欣賞美麗的、結構良好的代碼使人頓生感激。所以,Adam Freeman的圖書往往得到好評是理所當然的。
亞馬遜讀者
圖書目錄
目 錄
第1部分 ASP.NET MVC導論
第1章 偉大的思想 2
1.1 Web開發簡史 2
1.1.1 傳統的ASP.NET Web Form 3
1.1.2 ASP.NET Web Form的問題 3
1.2 當今的Web開發 4
1.2.1 Web標準與REST 4
1.2.2 敏捷與測試驅動開發 5
1.2.3 Ruby on Rails 6
1.2.4 Sinatra 6
1.2.5 Node.js 6
1.3 ASP.NET MVC的關鍵優點 7
1.3.1 MVC的體系結構 7
1.3.2 可擴展性 8
1.3.3 在HTML及HTTP上的嚴密控制 8
1.3.4 可測試性 8
1.3.5 強大的路由系統 9
1.3.6 建立在ASP.NET平台的精華之上 9
1.3.7 現代API 10
1.3.8 ASP.NET MVC是開源的 10
1.4 誰該使用ASP.NET MVC 10
1.4.1 與ASP.NET Web Form的比較 10
1.4.2 從Web Form遷移到MVC 11
1.4.3 與Ruby on Rails的比較 11
1.4.4 與MonoRail的比較 11
1.5 ASP.NET MVC 4的新特性 12
1.6 小結 12
第2章 第一個MVC應用程式 13
2.1 準備工作站 13
2.2 創建ASP.NET MVC新項目 13
2.2.1 添加第一個控制器 15
2.2.2 理解路由 17
2.3 渲染Web頁面 18
2.3.1 創建並渲染視圖 18
2.3.2 添加動態輸出 20
2.4 創建一個簡單的數據錄入應用程式 21
2.4.1 設定場景 21
2.4.2 設計一個數據模型 22
2.4.3 連結動作方法 23
2.4.4 建立表單 26
2.4.5 處理表單 28
2.4.6 添加驗證 31
2.4.7 完成示例 35
2.5 小結 36
第3章 MVC模式 37
3.1 MVC簡史 37
3.2 理解MVC模式 37
3.2.1 理解域模型 38
3.2.2 MVC的ASP.NET實現 38
3.2.3 MVC與其他模式比較 39
3.3 運用域驅動開發(DDD) 42
3.3.1 模擬一個例子域 42
3.3.2 通用語言 43
3.3.3 聚合與簡化 44
3.3.4 定義存儲庫 45
3.4 建立松耦合組件 46
3.4.1 使用依賴性注入 47
3.4.2 一個MVC專用的DI示例 48
3.4.3 使用依賴性注入容器 49
3.5 自動測試初步 50
3.5.1 理解單元測試 50
3.5.2 理解集成測試 57
3.6 小結 57
第4章 基本語言特性 58
4.1 創建示例項目 58
4.2 使用自動實現的屬性 59
4.3 使用對象與集合的初始化器 62
4.4 使用擴展方法 64
4.4.1 對接口運用擴展方法 66
4.4.2 創建過濾擴展方法 68
4.5 使用Lambda表達式 69
4.6 使用自動類型接口 72
4.7 使用匿名類型 73
4.8 執行語言集成查詢 74
4.9 使用Async方法 79
4.10 小結 81
第5章 使用Razor 82
5.1 創建示例項目 82
5.1.1 定義模型 82
5.1.2 定義控制器 83
5.1.3 創建視圖 83
5.2 使用模型對象 85
5.3 使用布局 86
5.3.1 創建布局 86
5.3.2 運用布局 88
5.3.3 使用視圖起始檔案 88
5.3.4 演示共享布局 89
5.4 使用Razor表達式 92
5.4.1 插入數據值 92
5.4.2 設定標籤屬性的值 94
5.4.3 使用條件語句 96
5.4.4 枚舉數組和集合 98
5.4.5 處理命名空間 100
5.5 小結 101
第6章 MVC基本工具 102
6.1 創建示例項目 102
6.1.1 創建模型類 103
6.1.2 添加控制器 104
6.1.3 添加視圖 104
6.2 使用Ninject 105
6.2.1 理解問題 105
6.2.2 將Ninject添加到Visual Studio項目 107
6.2.3 Ninject初步 107
6.2.4 建立MVC依賴性注入 109
6.2.5 指定屬性與構造器參數值 113
6.2.6 使用條件綁定 115
6.3 Visual Studio的單元測試 116
6.3.1 創建單元測試項目 117
6.3.2 創建單元測試 118
6.3.3 運行單元測試(並失敗) 121
6.3.4 實現特性 121
6.3.5 測試並修正代碼 122
6.4 使用Moq 123
6.4.1 理解問題 124
6.4.2 將Moq添加到Visual Studio項目 125
6.4.3 對單元測試添加模仿對象 126
6.4.4 創建更複雜的模仿對象 129
6.5 小結 131
第7章 SportsStore——一個真實的應用程式 132
7.1 開始 133
7.1.1 創建Visual Studio解決方案和項目 133
7.1.2 添加引用 134
7.1.3 設定DI容器 135
7.1.4 運行應用程式 136
7.2 從域模型開始 137
7.2.1 創建一個抽象的存儲庫 138
7.2.2 創建模仿存儲庫 138
7.3 顯示產品列表 139
7.3.1 添加控制器 139
7.3.2 添加視圖 141
7.3.3 設定默認路由 142
7.3.4 運行應用程式 142
7.4 準備資料庫 143
7.4.1 創建資料庫 143
7.4.2 定義資料庫方案 144
7.4.3 向資料庫添加數據 146
7.4.4 創建實體框架上下文 146
7.4.5 創建Product存儲庫 147
7.5 添加分頁 149
7.5.1 顯示頁面連結 151
7.5.2 改進URL 158
7.6 設定內容樣式 159
7.6.1 定義布局中的公用內容 159
7.6.2 添加CSS樣式 160
7.6.3 創建分部視圖 161
7.7 小結 163
第8章 SportsStore:導航 164
8.1 添加導航控制項 164
8.1.1 過濾產品列表 164
8.1.2 調整URL方案 167
8.1.3 建立分類導航選單 169
8.1.4 修正頁面計數 176
8.2 建立購物車 178
8.2.1 定義購物車實體 178
8.2.2 添加“加入購物車”按鈕 182
8.2.3 實現購物車控制器 183
8.2.4 顯示購物車內容 185
8.3 小結 187
第9章 SportsStore:完成購物車 188
9.1 使用模型綁定 188
9.2 完成購物車 192
9.2.1 刪除購物車物品 192
9.2.2 添加購物車摘要 193
9.3 遞交訂單 196
9.3.1 擴充域模型 196
9.3.2 添加結算過程 196
9.3.3 實現訂單處理器 199
9.3.4 註冊(接口)實現 201
9.3.5 完成購物車控制器 202
9.3.6 顯示驗證錯誤 205
9.3.7 顯示致謝頁面 206
9.4 小結 207
第10章 SportsStore:管理 208
10.1 添加分類管理 208
10.1.1 創建CRUD控制器 208
10.1.2 創建新的布局 210
10.1.3 實現List視圖 212
10.1.4 編輯產品 214
10.1.5 創建新產品 226
10.1.6 刪除產品 227
10.2 小結 229
第11章 SportsStore:安全性與收尾工作 230
11.1 實現管理控制器的安全 230
11.1.1 運用過濾器進行授權 231
11.1.2 創建認證提供器 232
11.1.3 創建Account控制器 234
11.1.4 創建視圖 235
11.2 圖像上傳 238
11.2.1 擴展資料庫 238
11.2.2 增強域模型 239
11.2.3 創建上傳用戶界面的元素 239
11.2.4 將圖像保存到資料庫 240
11.2.5 實現GetImage動作方法 241
11.2.6 顯示產品圖像 243
11.3 小結 244
第2部分 ASP.NET MVC 4細節
第12章 MVC項目綜述 246
12.1 使用Visual Studio的MVC項目 246
12.2 調試MVC應用程式 250
12.2.1 創建項目 250
12.2.2 運行Visual Studio調試器 252
12.2.3 引發Visual Studio調試器中斷 254
12.2.4 使用編輯並繼續 257
12.3 小結 260
第13章 URL路由 261
13.1 創建示例項目 261
13.2 URL模式 263
13.3 創建並註冊一條簡單路由 265
13.4 定義默認值 270
13.5 使用靜態URL片段 272
13.6 定義自定義片段變數 276
13.6.1 用自定義變數作為動作方法參數 278
13.6.2 定義可選URL片段 279
13.6.3 定義可變長路由 281
13.6.4 按命名空間區分控制器優先順序 283
13.7 約束路由 286
13.7.1 用正則表達式約束路由 286
13.7.2 將一條路由約束到一組指定的值 287
13.7.3 使用HTTP方法約束路由 287
13.7.4 定義自定義約束 288
13.8 對磁碟檔案的請求進行路由 290
13.8.1 配置應用程式伺服器 291
13.8.2 為磁碟檔案定義路由 292
13.9 繞過路由系統 292
13.10 小結 293
第14章 高級路由特性 294
14.1 準備示例項目 294
14.2 在視圖中生成輸出URL 294
14.2.1 用路由系統生成輸出URL 295
14.2.2 以其他控制器為目標 298
14.2.3 傳遞額外的值 299
14.2.4 指定HTML標籤屬性 300
14.2.5 生成連結中的全限定URL 301
14.2.6 生成URL(而不是連結) 302
14.2.7 在動作方法中生成輸出URL 302
14.2.8 根據指定路由生成URL 303
14.3 定製路由系統 304
14.3.1 創建自定義的RouteBase實現 304
14.3.2 創建自定義路由處理程式 308
14.4 使用區域 309
14.4.1 創建一個區域 310
14.4.2 填充區域 311
14.4.3 解析不明確的控制器問題 313
14.4.4 生成對區域動作的連結 314
14.5 URL方案最佳做法 315
14.5.1 使URL整潔和人性化 315
14.5.2 GET和POST:選用正確的一個 316
14.6 小結 316
第15章 控制器和動作 317
15.1 控制器介紹 317
15.1.1 準備示例項目 317
15.1.2 用Icontroller創建一個控制器 317
15.1.3 創建派生於Controller類的控制器 318
15.2 接收輸入 320
15.2.1 通過上下文對象獲取數據 320
15.2.2 使用動作方法參數 321
15.3 產生輸出 323
15.3.1 理解動作結果 325
15.3.2 通過渲染視圖返回HTML 328
15.3.3 將數據從動作方法傳遞給視圖 331
15.3.4 執行重定向 334
15.3.5 返回錯誤及HTTP代碼 339
15.4 小結 340
第16章 過濾器 341
16.1 使用過濾器 341
16.1.1 過濾器的四種基本類型 342
16.1.2 將過濾器運用於控制器和動作方法 343
16.2 創建示例項目 344
16.3 使用授權過濾器 344
16.3.1 運用自定義授權過濾器 346
16.3.2 使用內建的授權過濾器 347
16.4 使用異常過濾器 348
16.4.1 創建異常過濾器 348
16.4.2 運用異常過濾器 350
16.4.3 使用視圖來回響異常 351
16.4.4 使用內建的異常過濾器 354
16.5 使用動作過濾器 356
16.5.1 實現OnActionExecuting方法 356
16.5.2 實現OnActionExecuted方法 358
16.6 使用結果過濾器 359
16.7 使用其他過濾器特性 362
16.7.1 無註解屬性的過濾 362
16.7.2 使用全局過濾器 364
16.7.3 對過濾器執行進行排序 365
16.8 使用內建過濾器 367
16.8.1 使用RequireHttps過濾器 367
16.8.2 使用OutputCache過濾器 367
16.9 小結 369
第17章 控制器可擴展性 370
17.1 創建示例項目 370
17.2 創建自定義控制器工廠 372
17.2.1 處理備用控制器 374
17.2.2 實例化控制器類 374
17.2.3 實現其他接口方法 375
17.2.4 註冊自定義控制器工廠 375
17.3 使用內建的控制器工廠 376
17.3.1 命名空間優先排序 376
17.3.2 定製DefaultControllerFactory的控制器實例化 377
17.4 創建自定義動作調用器 379
17.5 使用內建的動作調用器 381
17.5.1 使用自定義動作名 382
17.5.2 使用動作方法選擇 383
17.6 用特殊控制器改善性能 388
17.6.1 使用無會話控制器 388
17.6.2 使用異步控制器 390
17.7 小結 394
第18章 視圖 395
18.1 創建自定義視圖引擎 395
18.1.1 創建示例項目 397
18.1.2 創建自定義的IView 398
18.1.3 創建IViewEngine實現 398
18.1.4 註冊自定義視圖引擎 399
18.1.5 測試視圖引擎 400
18.2 使用Razor引擎 401
18.2.1 創建示例項目 401
18.2.2 理解Razor視圖渲染 402
18.2.3 配置視圖搜尋位置 403
18.3 對Razor視圖添加動態內容 406
18.3.1 使用分段 406
18.3.2 使用分部視圖 411
18.3.3 使用子動作 414
18.4 小結 416
第19章 輔助器方法 417
19.1 創建示例項目 417
19.2 創建自定義輔助器方法 418
19.2.1 創建內聯的輔助器方法 418
19.2.2 創建外部輔助器方法 420
19.2.3 管理輔助器方法中的字元串編碼 423
19.3 使用內建的Form輔助器方法 427
19.3.1 創建Form元素 427
19.3.2 指定表單使用的路由 434
19.3.3 使用input輔助器 435
19.3.4 創建select元素 439
19.4 小結 441
第20章 模板輔助器方法 442
20.1 回顧示例項目 442
20.2 使用模板輔助器方法 444
20.2.1 生成標籤和顯示元素 447
20.2.2 使用整體模型模板輔助器 449
20.3 使用模型元數據 452
20.3.1 用元數據控制編輯及可見性 452
20.3.2 使用用於標籤的元數據 454
20.3.3 使用用於數據值的元數據 456
20.3.4 用元數據選擇顯示模板 457
20.3.5 將元數據運用於夥伴類 458
20.3.6 使用複合類型屬性 460
20.4 定製模板視圖輔助器系統 461
20.4.1 創建自定義編輯器模板 461
20.4.2 創建泛型模板 463
20.4.3 替換內建模板 464
20.5 小結 464
第21章 URL和Ajax輔助器方法 465
21.1 回顧並準備示例項目 465
21.2 創建基本的連結和URL 467
21.3 使用MVC的漸進式Ajax 469
21.3.1 創建同步表單視圖 469
21.3.2 為漸進式Ajax準備項目 470
21.4 創建漸進式Ajax表單 471
21.4.1 準備控制器 471
21.4.2 創建Ajax表單 473
21.4.3 理解漸進式Ajax的工作機制 474
21.5 設定Ajax選項 475
21.5.1 確保優雅降級 475
21.5.2 在Ajax請求期間給用戶提供反饋 477
21.5.3 請求之前對用戶進行提示 477
21.6 創建Ajax連結 478
21.7 使用Ajax回調 480
21.8 使用JSON 482
21.8.1 對控制器添加JSON支持 483
21.8.2 在瀏覽器中處理JSON 484
21.8.3 準備編碼數據 486
21.8.4 在動作方法中檢測Ajax請求 487
21.9 小結 489
第22章 模型綁定 490
22.1 準備示例項目 490
22.2 理解模型綁定 492
22.3 使用默認模型綁定器 494
22.3.1 綁定簡單類型 494
22.3.2 綁定複合類型 497
22.3.3 綁定到數組與集合 503
22.4 手工調用模型綁定 507
22.5 定製模型綁定系統 509
22.5.1 創建自定義的值提供器 509
22.5.2 創建自定義模型綁定器 512
22.5.3 註冊自定義模型綁定器 513
22.6 小結 515
第23章 模型驗證 516
23.1 創建示例項目 516
23.2 明確地驗證模型 518
23.3 顯示驗證訊息 521
23.4 使用其他驗證技術 525
23.4.1 在模型綁定器中執行驗證 525
23.4.2 用元數據指定驗證規則 526
23.4.3 定義自驗證模型 531
23.5 執行客戶端驗證 533
23.5.1 啟用和禁用客戶端驗證 533
23.5.2 使用客戶端驗證 534
23.5.3 理解客戶端驗證機制 535
23.6 執行遠程驗證 536
23.7 小結 539
第24章 捆綁包與顯示模式 540
24.1 理解默認腳本庫 540
24.2 準備示例應用程式 542
24.3 管理腳本與樣式表 544
24.4 使用腳本和樣式捆綁包 546
24.4.1 運用捆綁包 548
24.4.2 使用Scripts小節 551
24.4.3 修改後的資料分析 552
24.5 面向移動設備 554
24.5.1 觀察應用程式 554
24.5.2 使用移動專用的布局和視圖 555
24.5.3 創建自定義顯示模式 556
24.6 小結 558
第25章 Web API 559
25.1 理解Web API 559
25.2 創建Web API應用程式 560
25.2.1 創建模型和存儲庫 560
25.2.2 創建Home控制器 562
25.2.3 創建視圖及CSS 563
25.3 創建API控制器 565
25.4 理解API控制器工作機制 568
25.4.1 理解API控制器的動作選擇 568
25.4.2 將HTTP方法映射到動作方法 569
25.5 編寫使用Web API的JavaScript代碼 570
25.5.1 創建基本功能 571
25.5.2 為編輯新預約添加支持 572
25.5.3 添加刪除預約的支持 575
25.5.4 添加創建預約的支持 575
25.6 小結 576
第26章 部署 577
26.1 為部署準備應用程式 577
26.1.1 檢測視圖錯誤 578
26.1.2 禁用調試模式 579
26.1.3 去除未使用的連線字元串 580
26.2 Windows Azure的準備 581
26.2.1 創建Web網站和資料庫 581
26.2.2 準備遠程管理資料庫 583
26.2.3 創建資料庫模式 584
26.3 小結 588