第1章 ASP.NET + MVC 1
1.1 傳統MVC模式 2
1.1.1 自治視圖 2
1.1.2 什麼是MVC模式 3
1.2 MVC的變體 4
1.2.1 MVP 5
1.2.2 Model 2 13
1.2.3 ASP.NET MVC與Model 2 15
1.3 IIS/ASP.NET管道 15
1.3.1 IIS 5.x與ASP.NET 16
1.3.2 IIS 6.0與ASP.NET 17
1.3.3 IIS 7.0與ASP.NET 19
1.3.4 ASP.NET集成 20
1.3.5 ASP.NET管道 22
1.4 ASP.NET MVC是如何運行的 28
1.4.1 建立在“迷你版”ASP.NET MVC上的Web應用 28
1.4.2 路由 31
1.4.3 Controller的激活 37
1.4.4 Action的執行 41
1.4.5 完整的流程 49
第2章 路由 51
2.1 ASP.NET路由 52
2.1.1 請求URL與物理文件的分離 52
2.1.2 實例演示:通過路由實現請求地址與.aspx頁麵的映射(S201) 53
2.1.3 Route與RouteTable 57
2.1.4 路由注冊 65
2.1.5 根據路由規則生成URL 77
2.2 ASP.NET MVC路由 79
2.2.1 路由映射 79
2.2.2 路由注冊(S210) 80
2.2.3 缺省URL參數 83
2.2.4 基於Area的路由映射 85
2.2.5 鏈接和URL的生成 91
2.3 動態HttpHandler映射 98
2.3.1 UrlRoutingModule 99
2.3.2 PageRouteHandler與MvcRouteHandler 100
2.3.3 ASP.NET路由係統擴展 101
2.3.4 實例演示:通過自定義Route對ASP.NET路由係統進行擴展(S214) 102
第3章 Controller的激活 107
3.1 Controller激活係統全景展示 108
3.1.1 Controller 108
3.1.2 ControllerFactory 114
3.1.3 ControllerBuilder 115
3.1.4 Controller的激活與路由 122
3.2 Controller默認激活機製 125
3.2.1 Controller類型的解析 125
3.2.2 Controller類型的緩存 130
3.2.3 Controller的釋放和會話狀態行為的控製 131
3.3 IoC的應用 133
3.3.1 從Unity來認識IoC 133
3.3.2 Controller與Model的解耦 135
3.3.3 基於IoC的ControllerFactory 137
3.3.4 基於IoC的ControllerActivator 143
3.3.5 基於IoC的DependencyResolver 145
第4章 Model元數據的解析 149
4.1 Model元數據 150
4.1.1 Model元數據層次化結構 150
4.1.2 Model元數據的定製 154
4.1.3 IMetadataAware接口 171
4.2 模闆化數據的呈現 176
4.2.1 實例演示:通過模闆將布爾值顯示為RadioButton(S409) 176
4.2.2 預定義模闆 178
4.2.3 針對數據類型的模闆 185
4.2.4 數據類型名稱 V.S. 模闆名稱 189
4.2.5 模闆的獲取與執行 193
4.2.6 實例演示:通過定製Model元數據和自定義模闆 實現預定義列錶的呈現(S412)197
4.3 Model元數據的提供機製 205
4.3.1 再談ModelMetadata 206
4.3.2 ModelMetadataProvider 210
4.3.3 Model元數據提供係統的擴展 214
第5章 3個重要的描述對象 217
5.1 ControllerDescriptor 218
5.1.1 ReflectedControllerDescriptor 219
5.1.2 ReflectedAsyncControllerDescriptor 228
5.2 ActionDescriptor 229
5.2.1 AsyncActionDescriptor 230
5.2.2 ReflectedActionDescriptor 231
5.2.3 ReflectedAsyncActionDescriptor 232
5.2.4 TaskAsyncActionDescriptor 233
5.3 ParameterDescriptor 234
第6章 Model的綁定(一) 236
6.1 源數據的提供 237
6.1.1 NameValueCollectionValueProvider 238
6.1.2 DictionaryValueProvider 246
6.1.3 ValueProviderFactory 254
6.1.4 ValueProviderFactories 255
6.2 ModelBinder及其提供策略 259
6.2.1 ModelBinder 259
6.2.2 ModelBinderProvider 265
6.2.3 ModelBinders 268
6.2.4 CustomModelBinderAttribute 271
6.2.5 針對參數的ModelBinder是如何創建的 274
6.3 Model綁定的實施 276
6.3.1 綁定上下文的初始化 277
6.3.2 綁定過程中對ModelState的設置 279
第7章 Model的綁定(二) 283
7.1 綁定簡單對象 284
7.1.1 利用ValueProvider綁定簡單對象 284
7.1.2 實例演示:利用MyDefaultModelBinder綁定簡單類型參數(S701) 286
7.2 綁定復雜對象 289
7.2.1 復雜對象層次化結構 289
7.2.2 遞歸式綁定 291
7.2.3 實例演示:利用MyDefaultModelBinder綁定復雜類型參數(S702、S703) 294
7.3 綁定集閤 297
7.3.1 針對同名數據項的集閤綁定 297
7.3.2 針對索引的集閤綁定 302
7.4 綁定字典 311
7.4.1 字典是一個復雜類型的集閤 311
7.4.2 針對字典類型的Model綁定策略 312
7.4.3 實例演示:利用MyDefaultModelBinder綁定字典類型參數(S707) 316
第8章 Model的驗證(一) 318
8.1 幾種參數驗證方式 319
8.1.1 ModelError 319
8.1.2 驗證消息的呈現 320
8.1.3 手工驗證綁定的參數 322
8.1.4 使用ValidationAttribute特性 327
8.1.5 讓數據類型實現IValidatableObject接口 330
8.1.6 讓數據類型實現IDataErrorInfo接口 332
8.2 ModelValidator及其提供策略 334
8.2.1 ModelValidator與ModelValidatorProvider 334
8.2.2 DataAnnotationsModelValidator 337
8.2.3 ValidatableObjectAdapter 337
8.2.4 DataErrorInfoModelValidator 338
8.2.5 ClientModelValidator 339
8.2.6 CompositeModelValidator 341
8.3 Model驗證的實施 345
8.3.1 Model綁定過程中的驗證 346
8.3.2 實例演示:模擬Model綁定中的驗證(S810) 347
8.3.3 針對“必需”數據成員的驗證 351
第9章 Model的驗證(二) 354
9.1 ValidationAttribute特性 355
9.1.1 數據是如何被驗證的 356
9.1.2 幾個常用的ValidationAttribute 358
9.1.3 應用ValidationAttribute特性的唯一性 360
9.2 DataAnnotationsModelValidator及其提供策略 364
9.2.1 “適配”型DataAnnotationsModelValidator 365
9.2.2 DataAnnotationsModelValidatorProvider 368
9.2.3 將ValidationAttribute特性應用到參數上 375
9.2.4 一種Model類型,多種驗證規則 382
9.3 客戶端驗證 389
9.3.1 jQuery驗證 390
9.3.2 基於jQuery的Model驗證 394
9.3.3 自定義驗證 398
第10章 Action方法的執行 402
10.1 異步Action的定義 403
10.1.1 基於綫程池的請求處理機製 403
10.1.2 兩種異步Action方法的定義 404
10.1.3 AsyncManager 406
10.2 各種同步與異步組件 412
10.2.1 MvcHandler 412
10.2.2 Controller 413
10.2.3 ActionInvoker 414
10.2.4 ControllerDescriptor 420
10.2.5 ActionDescriptor 423
10.3 目標方法的執行 430
10.3.1 Action方法並不以“反射”方式執行 430
10.3.2 實例演示:采用針對錶達式樹執行Action方法(S1010) 432
第11章 View的呈現 437
11.1 ActionResult 438
11.1.1 EmptyResult 438
11.1.2 ContentResult 439
11.1.3 FileResult 446
11.1.4 JavaScriptResult 451
11.1.5 JsonResult 455
11.1.6 HttpStatusCodeResult 457
11.1.7 RedirectResult/RedirectToRouteResult 458
11.2 ViewResult與ViewEngine 461
11.2.1 View引擎中的View 461
11.2.2 ViewEngine 463
11.2.3 ViewResult的執行 465
11.3 Razor引擎 474
11.3.1 View的編譯原理 475
11.3.2 WebViewPage與WebViewPage<TModel> 480
11.3.3 RazorView 485
11.3.4 RazorViewEngine 495
第12章 過濾器 499
12.1 Filter及其提供機製 500
12.1.1 Filter與FilterProvider 500
12.1.2 以特性方式注冊過濾器 502
12.1.3 Controller本身就是過濾器 504
12.1.4 過濾器的全局注冊 504
12.1.5 實例演示:驗證Filter的提供機製和執行順序(S1201,S1202,S1203) 506
12.2 AuthenticationFilter 511
12.2.1 AuthenticationFilter的執行流程 512
12.2.2 實例演示:通過自定義AuthenticationFilter實現Basic認證(S1204) 513
12.3 AuthorizationFilter 518
12.3.1 AuthorizeAttribute 518
12.3.2 RequireHttpsAttribute 520
12.3.3 ValidateInputAttribute 520
12.3.4 ValidateAntiForgeryTokenAttribute 523
12.3.5 ChildActionOnlyAttribute 527
12.4 ActionFilter 528
12.4.1 ActionFilter的執行流程 529
12.4.2 ActionFilter對ActionResult的設置 530
12.4.3 異常處理 532
12.5 ExceptionFilter 534
12.5.1 HandleErrorAttribute 535
12.5.2 實例演示:利用自定義的ExceptionFilter集成Enterprise Library進行異常處理(S1207, S1208, S1209) 537
12.6 ResultFilter與OverrideFilter 551
12.6.1 ResultFilter的執行流程 552
12.6.2 屏蔽外圍過濾器 553
第13章 特性路由 556
13.1 特性路由注冊 557
13.1.1 RouteInfoProvider特性 557
13.1.2 基本路由映射 558
13.1.3 讓路由模闆能夠盡可能反映資源的層次結構 559
13.1.4 為路由變量設置約束 560
13.1.5 缺省路由變量 561
13.1.6 設置模闆前綴 562
13.1.7 設置Area名稱 563
13.2 約束錶達式的解析 564
13.2.1 RangeRouteConstraint 565
13.2.2 InlineConstraintResolver 566
13.2.3 自定義約束 570
13.3 Route的創建 574
13.3.1 特性路由注冊的Route對象 574
13.3.2 Route的生成機製 579
13.3.3 Controller的激活與Action方法的選擇 579
第14章 案例實踐 581
14.1 功能簡介 582
14.1.1 商品列錶的呈現 582
14.1.2 訂購商品 584
14.1.3 登錄與錯誤頁麵 585
14.2 設計概述 586
14.2.1 Controller-Service-Repository 586
14.2.2 IoC的應用 591
14.2.3 AOP的應用 594
14.2.4 異常處理 601
14.3 編程實現 602
14.3.1 數據錶的創建 603
14.3.2 Repository 604
14.3.3 Service 609
14.3.4 路由注冊和布局 612
14.3.5 ProductController 616
14.3.6 OrderController 624
14.3.7 AccountController 630
附錄A 實例列錶 635
· · · · · · (
收起)