圖書簡介:
本書是利用ASP.NET 4進行Web開發方面的權威書籍。全書分為5個部分,共21章,內容包括ASP.NET運行時環境、ASP.NET頁面和服務器控件、應用程序的設計、ASP.NET的基礎架構和客戶端編程。本書結合豐富的示例,深入剖析ASP.NET 4平臺下Web編程的技術內幕,內容翔實,可操作性強,是程序員開發實戰的參考寶典。
本書適合從事Web開發的程序員閱讀,旨在幫助他們提升ASP.NET開發技能。
前 言還記得在2004年秋天的一個知名軟件大會上,我發現許多廠商都在用一個新名詞AJAX來宣傳他們的ASP.NET產品。幾周之后,一個全新的編程模型便出現在我的ASP.NET大師課程當中——使用AJAX提升用戶體驗。就其本質而言,AJAX是一種非常輕量級的技術。它不新鮮——早在2000年的TechEd大會上,我就向一些從事C++開發的聽眾演示過AJAX的引擎(XmlHttpRequest),這甚至比.NET平臺的發布還要早4個星期。
由于廣為人知,這種稱為AJAX的技術改變了Web開發的思路。AJAX在Web世界中帶來了一系列連鎖反應,使Web應用程序發生了范式轉移。從科學發展史的角度看,范式轉移往往具有深遠的影響,尤其是在之前的思想在人們心中根深蒂固時。如今,當我們在談論Web時,不必再刻意強調其是否支持AJAX,只說Web就可以了——它包含富客戶端組件、可調用的HTTP端點和可互換的樣式。
不管人們是否接受,越是貼近AJAX,距離ASP.NET的“Web窗體”(Web Form)就越遠。隨著Web的發展,Web窗體在某些分支中可能不像其他技術表現得那么出色,而最終被淘汰。
那是否意味著本書不是讀者所需要的書,或者根本就選錯了技術呢?當然不是。
ASP.NET Web窗體到目前為止仍然是Web開發的有力工具。現在還不是淘汰它的時候。我們不妨將更多的注意力放在Web窗體一直有意對開發者隱藏的那部分技術上——CSS、JavaScript和HTML標記。
在我的ASP.NET大師課程中,我曾經演示過如何顯示一個可綁定數據的網格控件,其支持在單擊某個單元格時觸發AJAX調用。我的操作步驟完全遵循典型的ASP.NET開發技術規范。在后續的課程中,我鼓勵學員對其進行重寫,而不使用內聯的腳本和樣式設置。我還讓那些了解jQuery的學員不要使用它(這似乎有些偏執)。重寫的過程就是思考和創新的過程,而我所編寫的代碼也逐漸完善。不論ASP.NET MVC(一種與ASP.NET Web窗體相對應的技術)如何改進,ASP.NET Web窗體都不會消亡,但在某些方面確實會體現出技術的陳舊。作為開發者,我們要發現這些不足,并通過合理使用模式并引入JavaScript、jQuery、AJAX等技術來使其煥發生機。
在本書中,我去掉了之前的一些經典話題(如ADO.NET和LINQ to SQL),也壓縮了介紹控件的部分。我增加了對ASP.NET底層機制、ASP.NET配置、jQuery以及模式與設計原則的介紹。坦言之,ASP.NET自2.0版本以來并沒有很大變化。由于篇幅所限,本書也沒有涵蓋一些與ASP.NET自定義有關的高級話題,如表達式生成器、自定義提供程序和頁面解析器。這些內容已在我的《ASP.NET 2.0高級編程》一書中做了詳細的講解(雖然此書針對2.0平臺,但如今仍然適用)。本書新增的軟件設計原則方面的內容是對我另一部拙著思想的提煉——Microsoft .NET: Architecting Applications for the Enterprise (Microsoft Press, 2008)(該書是我與Andrea Saltarello合著的)。
讀 者 對 象
本書不適合初學者,書中不包含網頁設計和編碼方面手把手的指導。如果只對ASP.NET有模糊的認識,并希望能夠快速、有效地掌握這門技術,那么并不適合選擇本書。本書要求讀者預先了解ASP.NET的基礎知識和特性。
本書并不包含演示Microsoft Visual Studio向導的屏幕截圖,也不會逐一講解某些定制程序行為的選項。當然,這并不意味著我不喜歡或不推薦使用Visual Studio來開發ASP.NET應用程序。Visual Studio是編寫ASP.NET應用程序的強大工具。但從ASP.NET的角度而言,Visual Studio只是一個工具而已。本書會將重點放在ASP.NET的核心特性上。
如果您具有構建簡單ASP.NET頁面的基礎知識,并能夠輕松處理Web開發所遇到的常見問題,那么我將本書推薦給您。本書不是只包含現成的(直接可用的)ASP.NET代碼的初級教程,而是在那之后的進階。本書將向讀者解釋ASP.NET的工作原理、開發者的控制范圍以及ASP.NET的最佳實踐與不良實踐。本書不適合初學者,但仍可以將它放在案頭以供查閱。
系 統 要 求
為生成和運行本書配套的示例代碼,需具備以下軟件和硬件。
* Microsoft Windows 7、Microsoft Windows Vista、Microsoft Windows XP with Service Pack 2、Microsoft Windows Server 2003 with Service Pack 1或 Microsoft Windows 2000 with Service Pack 4。
* 任意版本的Microsoft Visual Studio 2010。
* 選配“Internet信息服務”(IIS),可以用它在實際的運行時環境中測試示例程序。
* Microsoft SQL Server 2005 Express(Visual Studio 2008附帶)或更高版本,或者Microsoft SQL Server 2005或更高版本。
* 全書與數據訪問有關的示例程序都會使用Microsoft SQL Server 2000的Northwind數據庫。
* 766 MHz奔騰或兼容的處理器(建議選用1.5 GHz奔騰或更高性能的處理器)。
* 256 MB內存(建議使用512 MB或更高容量)。
* 至少支持800×600、256色的顯示器(建議選用1024×768、16位高色彩)。
* CD-ROM或DVD-ROM驅動器。
* Microsoft鼠標或兼容的指點設備。示 例 代 碼
可以訪問以下網址,并在Companion Content頁面下載與本書配套的所有代碼:
http://go.microsoft.com/fwlink/?Linkid=2097721
勘誤與內容支持
我們已竭盡全力確保本書及其配套內容的準確性,但錯誤在所難免。如有發現,歡迎通過以下步驟反饋給我們。
(1) 訪問Microsoft Press在oreilly.com 的主頁:http://microsoftpress.oreilly.com。
(2) 在Search文本框中輸入本書的ISBN或書名。
(3) 在搜索結果中選擇本書。
(4) 在本書信息頁面的封面圖片下會有一列鏈接。
(5) 單擊View/Submit Errata。
本書的信息頁面包含與本書有關的信息和服務。如果需要其他幫助,可以發送電子郵件到Microsoft Press Book Support部門:mspinput@microsoft.com。
請注意,上述方式不提供對Microsoft軟件產品的支持。
讀 者 反 饋
Microsoft Press希望收到讀者的反饋。歡迎訪問以下頁面:
http://www.microsoft.com/learning/booksurvey
這是一個簡短的問卷。我們將認真考慮來自您的每條意見和建議。感謝您的參與!
溝 通 渠 道
讀者可以通過Twitter與Microsoft Press進行互動:http://twitter.com/MicrosoftPress。
1 譯者注:實際的下載頁面位于http://examples.oreilly.com/9780735643383-files/。
目 錄
第Ⅰ部分 ASP.NET運行時環境第1章 當今的ASP.NET Web窗體 3
1.1 ASP.NET Web窗體的“啟蒙運動” 4
1.1.1 原始積累 4
1.1.2 ASP.NET的弱項 6
1.1.3 框架與開發者 9
1.2 AJAX革命 11
1.2.1 傳統ASP.NET的蛻變 11
1.2.2 AJAX是Web內建的功能 14
1.3 ASP.NET的未來 16
1.3.1 ASP.NET MVC 16
1.3.2 ASP.NET 網頁 19
1.4 小結 20
第2章 ASP.NET與IIS 21
2.1 Web服務器環境 21
2.1.1 ASP.NET與IIS的演進 22
2.1.2 HTTP請求在IIS中歷經的過程 24
2.1.3 IIS 7.5的新特性 29
2.2 ASP.NET應用程序的部署 31
2.2.1 網站項目的XCopy部署 31
2.2.2 文件和設置的打包 34
2.2.3 網站預編譯 41
2.2.4 ASP.NET應用程序的配置 43
2.2.5 應用程序熱身與預加載 46
2.3 小結 49
第3章 ASP.NET的配置 50
3.1 ASP.NET配置層次結構 50
3.1.1 配置文件 50
3.1.2 <location>節 54
3.1.3 <system.web>節 56
3.1.4 其他頂層元素 83
3.2 配置數據的管理 87
3.2.1 使用配置API 87
3.2.2 配置節的加密 90
3.3 小結 94
第4章 HTTP處理程序、模塊與路由 95
4.1 HTTP處理程序的編寫 96
4.1.1 IHttpHandler接口 96
4.1.2 HTTP處理程序示例——圖片查看器 102
4.1.3 處理圖片更為高效的方式 106
4.1.4 HTTP處理程序高級編程 113
4.2 HTTP模塊的編寫 119
4.2.1 IHttpModule接口 120
4.2.2 自定義HTTP模塊 121
4.2.3 ASP.NET內建的HTTP模塊 124
4.3 URL路由 126
4.3.1 URL路由引擎 126
4.3.2 針對Web窗體的路由 128
4.4 小結 133第Ⅱ部分 ASP.NET頁面和服務器控件
第5章 剖析ASP.NET頁面 137
5.1 調用頁面 137
5.1.1 運行機制 138
5.1.2 處理請求 140
5.1.3 頁面的處理指令 144
5.2 Page類 153
5.2.1 Page類的屬性 153
5.2.2 Page類的方法 156
5.2.3 Page類的事件 160
5.2.4 事件模型 161
5.2.5 異步頁面 162
5.3 頁面生命周期 168
5.3.1 頁面啟動 168
5.3.2 處理回傳 170
5.3.3 頁面初始化 172
5.4 小結 173
第6章 ASP.NET核心服務器控件 174
6.1 ASP.NET服務器控件的基本屬性 174
6.1.1 Control類的屬性 175
6.1.2 Control類的方法 183
6.1.3 Control類的事件 184
6.1.4 其他特性 184
6.2 HTML控件 189
6.2.1 HTML控件的共性 190
6.2.2 HTML容器控件 193
6.2.3 HTML輸入控件 198
6.2.4 HtmlImage控件 203
6.3 Web控件 204
6.3.1 Web控件概述 204
6.3.2 核心Web控件 206
6.3.3 其他Web控件 211
6.4 小結 217
第7章 使用頁面 218
7.1 ASP.NET頁面的錯誤處理 218
7.1.1 異常處理的基礎 218
7.1.2 頁面錯誤處理的基礎 220
7.1.3 將錯誤映射到頁面 225
7.1.4 錯誤報告 229
7.2 頁面個性化 231
7.2.1 創建用戶配置文件 231
7.2.2 頁面交互 237
7.2.3 配置文件提供程序 243
7.3 頁面本地化 246
7.3.1 資源本地化 246
7.3.2 資源和區域設置 250
7.4 添加頁面資源 253
7.4.1 采用腳本 253
7.4.2 采用級聯樣式表和圖片 255
7.5 小結 256
第8章 網頁的構成及可用性 257
8.1 網頁構成一覽表 257
8.1.1 母版頁 257
8.1.2 編寫內容頁 261
8.1.3 處理母版頁和內容頁 265
8.1.4 編寫母版頁 269
8.1.5 設計ASP.NET頁面 272
8.2 網頁可用性一覽表 278
8.2.1 跨瀏覽器呈現 278
8.2.2 搜索引擎優化 281
8.2.3 站點導航 284
8.2.4 配置站點地圖 289
8.2.5 測試網頁 292
8.3 小結 294
第9章 ASP.NET輸入窗體 295
9.1 窗體程序設計 295
9.1.1 HtmlForm類 295
9.1.2 多窗體 297
9.1.3 跨頁面提交 303
9.2 驗證控件 307
9.2.1 驗證控件概述 307
9.2.2 控件庫 309
9.2.3 特殊功能 313
9.3 使用向導 321
9.3.1 Wizard控件的概述 321
9.3.2 在向導中添加步驟 325
9.3.3 通過向導導航 327
9.4 小結 331
第10章 數據綁定 333
10.1 數據綁定模型的基礎 333
10.1.1 合適的數據源 333
10.1.2 數據綁定屬性 336
10.2 數據綁定控件 341
10.2.1 列表控件 341
10.2.2 迭代控件 346
10.2.3 視圖控件 350
10.3 數據綁定表達式 351
10.3.1 簡單的數據綁定 352
10.3.2 DataBinder類 353
10.4 管理數據表格 355
10.4.1 GridView的對象模型 355
10.4.2 綁定數據到網格 359
10.4.3 使用GridView 366
10.5 數據源組件 370
10.5.1 數據源控件的內部結構 370
10.5.2 ObjectDataSource控件 372
10.6 小結 380
第11章 ListView控件 382
11.1 ListView控件 382
11.1.1 ListView對象模型 382
11.1.2 定義列表布局 388
11.1.3 創建表格式布局 389
11.1.4 創建流式布局 394
11.1.5 創建平鋪布局 395
11.1.6 為列表設定樣式 401
11.2 使用ListView控件 403
11.2.1 就地編輯 403
11.2.2 進行更新 406
11.2.3 插入新的數據項 407
11.2.4 選擇項目 411
11.2.5 項目列表分頁 413
11.3 小結 416
第12章 自定義控件 417
12.1 擴展現有控件 417
12.1.1 選擇基類 418
12.1.2 更豐富的HyperLink控件 419
12.2 從零開始生成控件 421
12.2.1 基類和接口 422
12.2.2 選擇顯示樣式 423
12.2.3 SimpleGaugeBar控件 425
12.2.4 顯示SimpleGaugeBar控件 429
12.3 生成數據綁定控件 435
12.3.1 主要功能 435
12.3.2 GaugeBar控件 436
12.4 生成組合模板控件 443
12.4.1 組合數據綁定控件的通性 444
12.4.2 BarChart控件 446
12.4.3 添加模板支持 455
12.5 小結 460第Ⅲ部分 應用程序的設計
第13章 軟件設計原則 463
13.1 “大泥球”現象 463
13.1.1 產生的原因 463
13.1.2 不良征兆 464
13.2 通用軟件原則 466
13.2.1 內聚性與耦合性 466
13.2.2 關注點分離 467
13.3 SOLID原則 468
13.3.1 單一職責原則 469
13.3.2 開閉原則 470
13.3.3 Liskov替換原則 471
13.3.4 接口分離原則 473
13.3.5 依賴倒置原則 474
13.4 依賴注入工具 477
13.4.1 Managed Extensibility
Framework簡介 477
13.4.2 Unity簡介 480
13.5 小結 483
第14章 應用程序的層次 485
14.1 多層架構 485
14.1.1 總體設計 486
14.1.2 設計方法 486
14.2 業務邏輯層 487
14.2.1 業務邏輯層的設計模式 487
14.2.2 應用程序邏輯 491
14.3 數據訪問層 494
14.3.1 數據訪問層的實現 494
14.3.2 為數據訪問層提供接口 496
14.3.3 對象/關系映射工具 498
14.3.4 傳統數據庫的超越 500
14.4 小結 501
第15章 模型-視圖-表示器(MVP)模式 502
15.1 表示層的模式 502
15.1.1 MVC模式 503
15.1.2 MVP模式 505
15.1.3 MVVM模式 507
15.2 MVP模式的實現 508
15.2.1 視圖的抽象 508
15.2.2 表示器的創建 511
15.2.3 導航 516
15.3 Web窗體應用MVP模式后的可測試性 520
15.3.1 可測試代碼的編寫 520
15.3.2 表示器類的測試 522
15.4 小結 525第Ⅳ部分 ASP.NET的基礎架構
第16章 HTTP請求上下文 529
16.1 應用程序的初始化 529
16.1.1 HttpApplication類的屬性 529
16.1.2 應用程序模塊 530
16.1.3 HttpApplication類的方法 531
16.1.4 HttpApplication類的事件 532
16.2 global.asax文件 534
16.2.1 global.asax的編譯 535
16.2.2 global.asax文件的語法 536
16.3 HttpContext類 538
16.3.1 HttpContext類的屬性 538
16.3.2 HttpContext類的方法 540
16.4 Server對象 541
16.4.1 HttpServerUtility類的屬性 542
16.4.2 HttpServerUtility類的方法 542
16.5 HttpResponse對象 545
16.5.1 HttpResponse類的屬性 545
16.5.2 HttpResponse類的方法 548
16.6 HttpRequest對象 550
16.6.1 HttpRequest類的屬性 551
16.6.2 HttpRequest類的方法 553
16.7 小結 554
第17章 ASP.NET狀態管理 556
17.1 應用程序狀態 556
17.1.1 HttpApplicationState類的屬性 557
17.1.2 HttpApplicationState類的方法 558
17.1.3 狀態同步 558
17.1.4 應用程序狀態的權衡 559
17.2 會話的狀態 560
17.2.1 會話狀態HTTP模塊 560
17.2.2 HttpSessionState類的屬性 563
17.2.3 HttpSessionState類的方法 564
17.3 使用會話狀態 565
17.3.1 標識會話 565
17.3.2 會話的生存期 570
17.3.3 將會話數據保存到遠程服務器 572
17.3.4 將會話狀態保存到
SQL Server 575
17.4 自定義會話狀態管理 579
17.4.1 構建自定義會話狀態提供程序 580
17.4.2 生成自定義會話ID 583
17.5 頁面的視圖狀態 585
17.5.1 StateBag類 585
17.5.2 視圖狀態的常見問題 586
17.5.3 對視圖狀態進行編程 589
17.6 小結 593
第18章 ASP.NET緩存 594
18.1 緩存應用程序數據 594
18.1.1 Cache類 594
18.1.2 使用ASP.NET緩存 597
18.1.3 實際問題 603
18.1.4 設計自定義依賴項 607
18.1.5 XML數據的緩存依賴項 608
18.1.6 SQL Server緩存依賴項 611
18.2 分布式緩存 613
18.2.1 分布式緩存的功能 614
18.2.2 AppFabric緩存服務 615
18.2.3 其他解決方案 620
18.3 緩存ASP.NET頁面 621
18.3.1 ASP.NET和瀏覽器緩存 622
18.3.2 使ASP.NET頁面可緩存 624
18.3.3 HttpCachePolicy類 628
18.3.4 緩存頁面的多個版本 629
18.3.5 緩存ASP.NET頁面的部分內容 632
18.3.6 高級緩存功能 637
18.4 小結 639
第19章 ASP.NET安全性 641
19.1 威脅來自于哪里 641
19.2 ASP.NET的安全上下文 642
19.2.1 誰在真正運行我的ASP.NET應用程序 642
19.2.2 更改ASP.NET進程的身份 645
19.2.3 ASP.NET應用程序的信任級別 646
19.2.4 ASP.NET身份驗證方法 649
19.3 使用窗體身份驗證 650
19.3.1 窗體身份驗證控制流 651
19.3.2 FormsAuthentication類 654
19.3.3 窗體身份驗證的配置 656
19.3.4 高級窗體身份驗證功能 659
19.4 成員資格和角色管理API 662
19.4.1 Membership類 663
19.4.2 成員資格提供程序 668
19.4.3 管理角色 672
19.5 基于聲明的身份標識概述 675
19.5.1 基于聲明的身份標識 675
19.5.2 在ASP.NET應用程序中使用聲明 677
19.6 與安全相關的控件 678
19.6.1 Login控件 679
19.6.2 LoginName控件 680
19.6.3 LoginStatus控件 681
19.6.4 LoginView控件 682
19.6.5 PasswordRecovery控件 683
19.6.6 ChangePassword控件 684
19.6.7 CreateUserWizard控件 685
19.7 小結 686第Ⅴ部分 客戶端編程
第20章 AJAX編程 689
20.1 AJAX基礎結構 690
20.1.1 AJAX的隱藏引擎 690
20.1.2 JavsScript和AJAX 694
20.2 ASP.NET中的部分呈現 699
20.2.1 ScriptManager控件 699
20.2.2 ScriptManagerProxy控件 704
20.2.3 UpdatePanel控件 706
20.3 關于部分呈現的注意事項 710
20.3.1 配置條件刷新 711
20.3.2 給用戶反饋 714
20.3.3 部分呈現的來龍去脈 720
20.4 REST和AJAX 722
20.4.1 腳本化服務 722
20.4.2 JSON有效載荷 731
20.4.3 JavaScript客戶端代碼 733
20.5 小結 737
第21章 jQuery編程 738
21.1 對客戶端的強大作用 738
21.1.1 在瀏覽器內編程 738
21.1.2 jQuery的要點 741
21.2 使用jQuery 743
21.2.1 檢測DOM是否就緒 743
21.2.2 包裝集 744
21.2.3 在包裝集上進行操作 750
21.2.4 操作DOM 754
21.2.5 jQuery緩存 757
21.2.6 AJAX功能 759
21.2.7 跨域調用 761
21.3 小結 764