目錄 - 碁峰資訊epaper.gotop.com.tw/pdf/acl026600.pdf · 聖殿祭司的 8 asp.net 3.5...

27
6 聖殿祭司的 ASP.NET 3.5 專家技術手冊 I 使用 C# 目錄 Chapter 01 VS 2008 IDE 整合開發環境功能介紹 1-1 VS 2008 對程式設計師的意義 ...................................................... 1-2 1-2 VS 2008 開發工具版本介紹.......................................................... 1-4 1-3 VS 2008 VS 2005 VS.NET 2003 開發環境的共存 ............... 1-5 1-4 VS 2008 開發工具安裝 ................................................................. 1-9 1-5 建立第一個 ASP.NET 3.5 WebSite 網站 ................................ 1-11 1-6 方案總管功能圖說 ...................................................................... 1-15 1-7 方案與專案的管理與設定........................................................... 1-18 1-8 設計模式、原始檔與分割模式 ................................................... 1-21 1-9 文件大綱視窗 ............................................................................. 1-22 1-10 HTML 標記巡覽(Tag Navigation.......................................... 1-23 1-11 原始檔模式下控制項拖曳的改良 ............................................... 1-24 1-12 HTML 標籤格式保留的改良....................................................... 1-24 1-13 文件視窗 ..................................................................................... 1-25 1-14 視窗位置的配置.......................................................................... 1-28 1-15 Web 開發環境的設定.................................................................. 1-29 1-16 安裝部署 ..................................................................................... 1-33 1-17 範例程式名稱列表 ...................................................................... 1-36 1-18 VS 2008 SP1 修補更新 ............................................................... 1-37 結論 .................................................................................................... 1-39 Chapter 02 VS 2008 進階功能密技 2-1 CodeBeside ................................................................................... 2-2 2-2 Code-Behind 2.0 ......................................................................... 2-10 2-3 專案設計工具(Project Designer ............................................ 2-12 2-4 ASP.NET 程式開發伺服器 Port 固定下來的密技................... 2-13 2-5 ASP.NET 網站多個.NET Framework 版本的設定 ...................... 2-17

Upload: others

Post on 05-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

6

聖殿祭司的 ASP.NET 3.5專家技術手冊 I — 使用 C#

目錄

Chapter 01 VS 2008 IDE整合開發環境功能介紹

1-1 VS 2008對程式設計師的意義 ...................................................... 1-2 1-2 VS 2008開發工具版本介紹.......................................................... 1-4 1-3 VS 2008與 VS 2005或 VS.NET 2003開發環境的共存 ............... 1-5 1-4 VS 2008開發工具安裝 ................................................................. 1-9 1-5 建立第一個 ASP.NET 3.5的 WebSite網站 ................................ 1-11 1-6 方案總管功能圖說 ...................................................................... 1-15 1-7 方案與專案的管理與設定........................................................... 1-18 1-8 設計模式、原始檔與分割模式 ................................................... 1-21 1-9 文件大綱視窗 ............................................................................. 1-22 1-10 HTML標記巡覽(Tag Navigation) .......................................... 1-23 1-11 原始檔模式下控制項拖曳的改良 ............................................... 1-24 1-12 HTML標籤格式保留的改良....................................................... 1-24 1-13 文件視窗 ..................................................................................... 1-25 1-14 視窗位置的配置.......................................................................... 1-28 1-15 Web開發環境的設定.................................................................. 1-29 1-16 安裝部署 ..................................................................................... 1-33 1-17 範例程式名稱列表 ...................................................................... 1-36 1-18 VS 2008 SP1修補更新 ............................................................... 1-37 結論 .................................................................................................... 1-39

Chapter 02 VS 2008進階功能密技

2-1 CodeBeside ................................................................................... 2-2 2-2 Code-Behind 2.0 ......................................................................... 2-10 2-3 專案設計工具(Project Designer) ............................................ 2-12 2-4 將 ASP.NET程式開發伺服器 Port固定下來的密技................... 2-13 2-5 ASP.NET網站多個.NET Framework版本的設定 ...................... 2-17

7

目錄

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

2-6 ASPNET_REGIIS.exe IIS登錄工具 ............................................2-18 2-7 網站資料庫的註冊 ......................................................................2-21 2-8 資料庫連線字串的設定與讀取 ...................................................2-22 2-9 資料庫連線設定的加密與解密 ...................................................2-25 2-10 ASP.NET網站特殊資料夾 ..........................................................2-26 2-11 程式碼片段(Code Snippets) ...................................................2-28 2-12 程式碼重構(Refactoring)........................................................2-37 2-13 ASP.NET 3.5的編譯模型(Compilation Model) ......................2-42

2-13-1 ASP.NET網站動態編譯(Dynamic Compilation) .......2-42 2-13-2 ASP.NET網站先行編譯(Precompilation) .................2-45

2-14 ClientBuildManager類別的編譯功能 .........................................2-48 2-15 發行網站(Publish Web Site) ...................................................2-51 2-16 專案同時使用 C# 與 VB兩種語言及多組件的技巧....................2-52 結論 ....................................................................................................2-56

Chapter 03 SQL Server 2008資料庫安裝、 管理與使用策略

3-1 SQL Server 2008資料庫概觀介紹 ................................................3-2 3-2 SQL Server 2008、2005與 2000共存安裝 ...................................3-4

3-2-1 安裝不同版本資料庫 .......................................................3-4 3-2-2 SQL Server資料庫服務的啟動與停止設定 ...................3-10 3-2-3 命令模式下 SQL Server資料庫服務的啟動與停止 .......3-11 3-2-4 ADO.NET程式資料庫連線設定 ....................................3-12 3-2-5 將不同版本資料庫納入同一管理介面 ...........................3-13

3-3 SQL Server 2008線上叢書及相關資源 .......................................3-15 3-4 匯入北風資料庫(Northwind ) .................................................3-17 3-5 SQL Server 2008資料庫之設定與管理 .......................................3-20 3-6 在 VS 2008 IDE中連接 SQL Server資料庫 ...............................3-23 3-7 資料庫基本功能介紹 ..................................................................3-27 結論 ....................................................................................................3-35

8

聖殿祭司的 ASP.NET 3.5專家技術手冊 I — 使用 C#

Chapter 04 ASP.NET 3.5的 Page、Cross Page Posting 與 Client-Side Script功能

4-1 跨網頁公佈(Cross-Page Posting) ............................................. 4-2 4-1-1 網頁導向技術比較 ........................................................... 4-2 4-1-2 跨網頁公佈技術意義解說................................................ 4-6 4-1-3 Button控制項與 PostBackUrl屬性.................................. 4-7 4-1-4 從來源網頁取得公用屬性值 ............................................ 4-7

4-1-5 IsCrossPagePostBack vs. IsPostBack ............................. 4-13 4-1-6 判斷 ASP.NET Web網頁的叫用方式 ............................ 4-15 4-1-7 跨網頁公佈原理及評析 ................................................. 4-16

4-2 HtmlHead與 HtmlMeta類別 ...................................................... 4-17 4-3 Client端 Script的增強與改良 .................................................... 4-22

4-3-1 設定控制項成為焦點(Focus) .................................... 4-22 4-3-2 設定 WebForm表單預設按鈕(Default Button) ......... 4-25 4-3-3 Client端 Click事件 ....................................................... 4-29 4-3-4 Client端 Script的動態註冊 ........................................... 4-34

4-4 Client端的非同步 Callback(Client-Callback) ........................ 4-39 4-5 ASP.NET網頁指示詞(Page Directive)................................... 4-48 結論 .................................................................................................... 4-50

Chapter 05 全方位的神奇新物件 My

5-1 My物件意涵 ................................................................................. 5-2 5-2 My物件與專案類型相依性 .......................................................... 5-5 5-3 My物件對 C# 程式設計師的意義 ................................................ 5-7 5-4 在 C# 環境使用 My物件的步驟 ................................................... 5-8 5-5 My的大分類物件功能簡介 ........................................................ 5-13 5-6 My.Application物件 ................................................................... 5-14

5-6-1 My.Application.Info物件 .............................................. 5-16 5-6-2 My.Application.Log物件 ............................................... 5-19

5-7 My.Computer物件 ...................................................................... 5-23 5-7-1 My.Computer.Info物件 ................................................. 5-25 5-7-2 My.Computer.Audio物件 .............................................. 5-26 5-7-3 My.Computer.Clipboard物件 ........................................ 5-28

9

目錄

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

5-7-4 My.Computer.FileSystem物件 .......................................5-31 5-7-5 My.Computer.Network物件 ...........................................5-34 5-7-6 My.Computer.Ports物件 ................................................5-36 5-7-7 My.Computer.Registry物件 ...........................................5-37

5-8 My.Forms物件 ............................................................................5-39 5-9 My.Log物件 ...............................................................................5-41 5-10 My.Resources物件 ......................................................................5-43 5-11 My.Settings物件 .........................................................................5-51 5-12 My.User物件 ..............................................................................5-57 5-13 My.WebServices物件 .................................................................5-59 5-14 My物件內部運作原理揭密 .........................................................5-65 5-15 C# 直接呼叫 My物件的奇幻聯想...............................................5-66 結論 ....................................................................................................5-68

Chapter 06 GridView與 SqlDataSource控制項-應用篇

6-1 GridView功能特色 .......................................................................6-2 6-2 GridView與 SqlDataSource控制項架構 .......................................6-3 6-3 GridView與 SqlDataSource宣告式語法 .......................................6-5 6-4 GridView控制項屬性 ...................................................................6-7 6-5 網站資料庫的註冊與匯入 ...........................................................6-10 6-6 對 VS 2008及 GridView精靈的正確期許 ..................................6-16 6-7 GridView的 DataSourceID vs. DataSource屬性 .........................6-18 6-8 GridView控制項的七種欄位類型之應用 ...................................6-20

6-8-1 BoundField資料繫結欄位..............................................6-21 6-8-2 標準數值格式化字串 .....................................................6-27 6-8-3 ButtonField按鈕欄位 .....................................................6-35 6-8-4 CommandField命令按鈕欄位 ........................................6-42 6-8-5 CheckBoxField核取方塊欄位........................................6-48 6-8-6 HyperLinkField超連結欄位 ...........................................6-49 6-8-7 ImageField影像欄位 ......................................................6-56 6-8-8 TemplateField樣板欄位 .................................................6-60 6-8-9 資料繫結 Eval方法 vs. Bind方法..................................6-69 6-8-10 將 Field欄位轉換成樣板 ...............................................6-69

10

聖殿祭司的 ASP.NET 3.5專家技術手冊 I — 使用 C#

6-9 談 GridView的 AJAX非同步 Callback ...................................... 6-72 6-10 GridView分頁外觀設定 ............................................................. 6-74 6-11 GridView的多個資料表的 Table Join查詢 ................................ 6-76 6-12 GridView結合 OnClientClick進行確認動作.............................. 6-78 結論 .................................................................................................... 6-78

Chapter 07 GridView與 SqlDataSource 控制項-動態程式篇

7-1 GridView對資料處理與事件模式的改變 ..................................... 7-2 7-2 GridView控制項方法與事件 ........................................................ 7-3 7-3 GridView的 Code-Behind撰寫模式 ............................................. 7-5 7-4 GridViewRow之 RowType與 RowState屬性 .............................. 7-7 7-5 GridView與多個 Table資料表的 Join查詢 ............................... 7-18 7-6 GridView分頁與排序功能(Page & Sort) ............................... 7-20 7-7 GridView資料列的選擇功能(Selection) ................................ 7-28 7-8 GridView資料列的刪除功能(Delete) .................................... 7-35 7-9 GridView資料列的編輯與更新功能........................................... 7-39 7-10 動態建立 TemplateField樣板欄位的原理 .................................. 7-44 7-11 GridView表頭表尾的跨欄跨列、多重表頭表尾 ........................ 7-51

7-11-1 多重表頭表尾的基本原理.............................................. 7-52 7-11-2 GridView多重表頭與表尾的跨欄跨列 .......................... 7-54

7-12 GridView對背景圖片的支援 ...................................................... 7-63 7-13 GridView資料列的外部更新 ...................................................... 7-65 7-14 GridView的資料庫交易 ............................................................. 7-69 結論 .................................................................................................... 7-69

Chapter 08 新一代資料存取方式 Data Source控制項

8-1 祭司對 Data Source控制項的觀點 ............................................... 8-2 8-2 Data Source控制項誕生的使命 .................................................... 8-2 8-3 Data Source資料來源控制項簡介 ................................................ 8-4 8-4 Data Source控制項架構 ............................................................... 8-6 8-5 DataSourceID屬性與資料繫結控制項 .......................................... 8-8 8-6 DataSourceMode資料來源模式 .................................................... 8-9

11

目錄

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

8-7 DataSource控制項參數型態 .......................................................8-12 8-8 六種參數型態的應用 ..................................................................8-14 8-9 參數方向(Parameter Direction) ..............................................8-23 8-10 Data Source控制項的資料篩選過濾機制....................................8-25 8-11 Data Source控制項的快取 ..........................................................8-33 8-12 Data Source控制項的分頁與排序原理解說 ................................8-35 8-13 Data Source控制項資料庫交易 ..................................................8-36 8-14 SqlDataSource控制項交易機制的詭異之處 ...............................8-46 8-15 SqlDataSource控制項對 Stored Procedure預存程序的存取 .......8-47 8-16 ObjectDataSource控制項 ............................................................8-51 8-17 資料存取衝突偵測 ......................................................................8-65 8-18 資料來源控制項與 ADO.NET之間的抉擇時機 ..........................8-76 結論 ....................................................................................................8-78

Chapter 09 DetailsView、FormView與 DataList控制項介紹

9-1 DetailsView控制項 .......................................................................9-2 9-1-1 DetailsView欄位 Field類型 ............................................9-3 9-1-2 DetailsView事件 .............................................................9-5 9-1-3 DataItem與 DetailsViewRow相關重要屬性....................9-8 9-1-4 DetailsView的 Mode模式應用 ......................................9-14 9-1-5 DetailsView自訂外觀樣式 ............................................9-17 9-1-6 DetailsView對背景及 Logo圖片顯示的支援 ................9-22 9-1-7 DetailsView自訂樣板與資料繫結 .................................9-24 9-1-8 DetailsView動態顯示資料庫中 Image欄位圖片原理 ...9-29 9-1-9 DetailsView在 Master-Details的應用 ...........................9-35

9-2 FormView控制項 .......................................................................9-35 9-2-1 FormViewRow、FormViewMode與 DataRowView 的應用 ............................................................................9-37 9-2-2 FormView自訂命令按鈕 ...............................................9-42

9-3 DataList控制項 ...........................................................................9-45 結論 ....................................................................................................9-51

12

聖殿祭司的 ASP.NET 3.5專家技術手冊 I — 使用 C#

Chapter 10 ASP.NET 3.5網站巡覽功能 (Web Site Navigation)

10-1 ASP.NET 3.5網站巡覽功能的意義 ............................................ 10-2 10-2 網站巡覽控制項簡介 .................................................................. 10-4 10-3 建立網站巡覽地圖路徑 .............................................................. 10-6

10-3-1 建立 SiteMap檔............................................................. 10-7 10-3-2 建立自訂 XML的網站巡覽 ........................................... 10-9

10-4 TreeView控制項 ...................................................................... 10-10 10-4-1 建立 TreeView控制項 ................................................. 10-11 10-4-2 以程式動態建立 TreeView控制項 ............................... 10-17 10-4-3 TreeView控制項屬性 .................................................. 10-23 10-4-4 TreeView控制項方法與事件 ....................................... 10-25

10-5 SiteMapPath伺服器控制項 ....................................................... 10-30 10-5-1 建立 SiteMapPath控制項 ............................................ 10-31 10-5-2 SiteMapPath控制項屬性 ............................................. 10-33 10-5-3 SiteMapPath控制項事件 ............................................. 10-36

10-6 Menu伺服器控制項................................................................. 10-37 10-6-1 Menu控制項的靜態與動態顯示模式 .......................... 10-39 10-6-2 建立 Menu控制項 ....................................................... 10-42 10-6-3 以程式動態建立 Menu控制項 ..................................... 10-44 10-6-4 Menu控制項屬性 ........................................................ 10-47 10-6-5 Menu控制項事件 ........................................................ 10-50

10-7 透過 SiteMapProvider API存取多個 SiteMap檔 ..................... 10-52 10-8 SiteMap類別 API ..................................................................... 10-58 結論 .................................................................................................. 10-63

Chapter 11 Master Pages主版頁面

11-1 Master Pages主版頁面概觀 ........................................................ 11-2 11-2 建立 Master Pages主版頁面 ....................................................... 11-5 11-3 使用 Master Pages建立內容頁 ................................................... 11-9 11-4 Master Pages主版頁面運作原理 .............................................. 11-12 11-5 巢狀 Master Pages(Nested Master Pages) ............................. 11-14

13

目錄

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

11-6 在內容頁以程式讀取 Master Page相關物件 .............................11-18 結論 ..................................................................................................11-19

Chapter 12 ASP.NET 3.5網站管理工具與 Configuration組態 API

12-1 註冊 ASP.NET網站資料庫與設定 Provider ...............................12-2 12-2 ASPNET_REGSQL資料庫註冊工具 ..........................................12-3 12-3 ASP.NET網站管理工具..............................................................12-7

12-3-1 安全性管理(Security) ..............................................12-11 12-3-2 使用者管理功能 ...........................................................12-12 12-3-3 角色管理(Role) .......................................................12-17 12-3-4 網站存取規則(Access Rules) ..................................12-20 12-3-5 應用程式管理(Application) .....................................12-23 12-3-6 提供者管理(Provider) .............................................12-31

12-4 在沒有安裝 VS 2008時,如何使用 ASP.NET網站管理工具 ..12-33 12-5 ASP.NET MMC Snap-In嵌入式管理單元 ................................12-35 12-6 組態管理 API(Configuration API) ........................................12-40 12-7 以程式對 Web.config組態檔執行加密 .....................................12-47 12-8 ASPNET_REGIIS命令的 IIS註冊與 Web.config加密解密 .....12-54 結論 ..................................................................................................12-58

Chapter 13 ASP.NET網頁安全性管理之驗證與授權

13-1 祭司的話 .....................................................................................13-2 13-2 驗證與授權之意義 ......................................................................13-3 13-3 驗證與授權在 Windows作業系統上的權力根源 ........................13-4 13-4 IIS網站目錄安全性設定 .............................................................13-7 13-5 Windows驗證模式 ......................................................................13-9 13-6 Forms驗證模式 ........................................................................13-11 13-7 Forms驗證模式機制之探討 ......................................................13-16 結論 ..................................................................................................13-18

14

聖殿祭司的 ASP.NET 3.5專家技術手冊 I — 使用 C#

Chapter 14 ASP.NET 3.5網頁安全性管理之 Login控制項

14-1 祭司的話 ..................................................................................... 14-2 14-2 Login相關控制項 ....................................................................... 14-3 14-3 檢查 ASP.NET網站資料庫註冊及驗證模式設定相關功能 ........ 14-5 14-4 Login控制項............................................................................... 14-7 14-5 自訂 Login控制項樣板 ............................................................. 14-15 14-6 LoginName控制項 ................................................................... 14-20 14-7 LoginStatus控制項 ................................................................... 14-21 14-8 LoginView控制項 .................................................................... 14-23 14-9 建立使用者精靈 CreateUserWizard控制項 .............................. 14-28 14-10 變更密碼 ChangePassword控制項 ........................................... 14-29 14-11 恢復密碼 PasswordRecovery控制項 ........................................ 14-31 結論 .................................................................................................. 14-33

Chapter 15 ASP.NET 3.5網頁安全性管理之 Membership與 Role API

15-1 祭司的話 ..................................................................................... 15-2 15-2 Membership成員資格................................................................. 15-4

15-2-1 Membership類別 ........................................................... 15-5 15-2-2 MembershipUser類別 .................................................... 15-8 15-2-3 Membership成員資格管理 API之實際範例運用 ........ 15-10

15-3 Membership背後運作的秘密 ................................................... 15-43 15-4 Role角色管理 ........................................................................... 15-46

15-4-1 Roles類別的屬性與方法 ............................................. 15-47 15-4-2 Roles角色群組管理 API之實際範例運用 ................... 15-50

15-5 ASP.NET 3.5網頁授權(Authorization) ................................ 15-70 結論 .................................................................................................. 15-74

Chapter 16 Profile使用者設定檔

16-1 Profile使用者設定檔應用範圍 ................................................... 16-2 16-2 Profile設定檔對使用者資料的儲存............................................ 16-3 16-3 定義 Profile使用者設定檔.......................................................... 16-4

15

目錄

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

16-4 更新 Profile使用者設定檔 ..........................................................16-8 16-5 Profile使用者設定檔與使用者身份驗證的關係 .......................16-12 16-6 讀取全部使用者之 Profile設定檔資料 .....................................16-13 16-7 Profile使用者設定檔運作原理 .................................................16-18 16-8 匿名使用者 Profile(Anonymous Profile) ..............................16-23 16-9 儲存與使用匿名使用者 Profile設定檔 .....................................16-25 16-10 匿名者 Profile移轉(Migration) ............................................16-29 16-11 ProfileModule類別 ...................................................................16-33 16-12 Profile_Personalize事件 ...........................................................16-34 16-13 ProfileAutoSaving事件 .............................................................16-41 16-14 ProfileManager類別..................................................................16-45 16-15 以程式讀取 Web.config檔中的 Profile Property屬性設定 .......16-54 16-16 以程式動態建立 Profile設定檔 ................................................16-57 16-17 以程式讀取 anonymousIdentification相關屬性設定 .................16-60 16-18 加密 Profile設定檔區段強化安全性 .........................................16-62 結論 ..................................................................................................16-63

Chapter 17 Web Parts Framework

17-1 Web組件架構 .............................................................................17-2 17-2 Web組件(Web Parts)功能概觀 ............................................17-12 17-3 細說 Web組件控制項集合........................................................17-13 17-4 Web組件的五種顯示模式(DisplayMode) ............................17-18

17-4-1 瀏覽模式:顯示 Web組件控制項 ...............................17-20 17-4-2 設計模式:拖曳 Web組件控制項到不同區域.............17-23 17-4-3 編輯模式:編輯修改 Web屬性 ...................................17-28 17-4-4 目錄模式:顯示與匯入 Web組件控制項 ....................17-44 17-4-5 連接模式:WebPart組件控制項之間的連接溝通 .......17-59

17-5 Web組件的個人化資料管理 .....................................................17-60 17-5-1 呼叫 WebPartManager.Personalization 重設個人化資料 ...........................................................17-60 17-5-2 直接刪除個人化資料表中 Web組件記錄 ....................17-62 17-5-3 使用 PersonalizationAdministration類別進行管理 ......17-63

結論 ..................................................................................................17-70

16

聖殿祭司的 ASP.NET 3.5專家技術手冊 I — 使用 C#

Chapter 18 ASP.NET 3.5其他新增控制項介紹

18-1 FileUpload檔案上載控制項 ....................................................... 18-2 18-2 TextBox的自動完成(AutoCompleteType)改良 ................... 18-15 18-3 DropDownList控制項之 AppendData-BoundItems屬性 .......... 18-18 18-4 Panel控制項的捲軸 .................................................................. 18-19 18-5 MultiView與 View控制項 ....................................................... 18-21 18-6 Wizard精靈控制項 ................................................................... 18-28

Appendix A 微軟 ASP.NET 3.5的 AJAX利劍~ ASP.NET AJAX

A-1 AJAX非同步技術........................................................................ A-2 A-2 AJAX簡單範例 ........................................................................... A-3 A-3 AJAX範例程式特點說明 ............................................................ A-7 A-4 瞭解 AJAX應用程式與 ASP.NET AJAX .................................... A-7

A-4-1 AJAX所針對的開發議題 ............................................... A-8 A-4-2 AJAX技術概念 .............................................................. A-8 A-4-3 ASP.NET AJAX架構提供一個 AJAX新途徑 .............. A-10

Appendix B ASP.NET 3.5 AJAX伺服器控制項

B-1 以 Server端與 Client端為中心的兩種開發模式.......................... B-2 B-2 ASP.NET 3.5 AJAX系統環境安裝設定 ...................................... B-4 B-3 伺服端的 ASP.NET AJAX非同步計時器應用 ............................ B-7

B-3-1 建立 ASP.NET AJAX專案 ............................................. B-7 B-3-2 ASP.NET AJAX伺服端技術名詞解說 ......................... B-10

B-4 再論 ASP.NET AJAX非同步更新與傳統的頁面更新 ............... B-21 B-5 ASP.NET AJAX伺服器控制項屬性與事件功能解說 ................ B-26 B-6 ASP.NET AJAX 4.0大未來 ....................................................... B-28

PDF格式電子書, 請參閱隨書光碟

PDF格式電子書, 請參閱隨書光碟

PDF格式電子書, 請參閱隨書光碟

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

VS 2008進階功能密技

2-1 CodeBeside

2-2 Code-Behind 2.0

2-3 專案設計工具(Project Designer)

2-4 將 ASP.NET程式開發伺服器 Port固定下來的密技

2-5 ASP.NET網站多個 .NET Framework版本的設定

2-6 ASPNET_REGIIS.exe IIS登錄工具

2-7 網站資料庫的註冊

2-8 資料庫連線字串的設定與讀取

2-9 資料庫連線設定的加密與解密

2-10 ASP.NET網站特殊資料夾

2-11 程式碼片段(Code Snippets)

2-12 程式碼重構(Refactoring)

2-13 ASP.NET 3.5的編譯模型(Compilation Model)

2-13-1 ASP.NET網站動態編譯(Dynamic Compilation)

2-13-2 ASP.NET網站先行編譯(Precompilation)

2-14 ClientBuildManager類別的編譯功能

2-15 發行網站(Publish Web Site)

2-16 專案同時使用 C# 與 VB兩種語言及多組件的技巧

2-2

聖殿祭司的 ASP.NET 3.5專家技術手冊 I — 使用 C#

本章將針對 VS 2008 進階功能密技做介紹,有許多功能和特性是平常不容易察覺的知識,善用這些進階知識與技巧,能夠在開發專案時更

加靈活,同時也能夠取用 IDE 工具及系統底層的新威力,在看完這些密技,定會豁然開朗原來 VS 2008還有這些必殺密技,相信絕對能夠令您開開眼界的。

2-1 CodeBeside ASP.NET 3.5 WebForm程式碼與 HTML分離的模式,採用了一個叫

做「CodeBeside」新模式,但很多人第一直覺會覺得有點“驚慌",因為好不容易才學會並習慣 Code-Behind 模式,難道又要被淘汰?又得重學?心中頓時泛起一絲絲哀愁,覺得微軟是不是變動得太大太快?其實

諸位不必過度擔憂,我引出一段話:

大科學家牛頓說:「如果我看得比較遠,是因為我站在巨人的肩膀

上。」牛頓吸取了阿基米得和伽利略的經驗與成果,加上自己不斷的努

力,才能創造出偉大成就,發現地心引力,推導出力學三大定律。而愛

因斯坦、楊振寧、李政道、李遠哲等人,也是站在牛頓的肩膀上,才能

有所成就,對世界做出貢獻。

因此科學或技術幾乎很少是“Revolution",多半是“Evolution",而什麼是 Revolution,什麼又是 Evolution?Revolution 是革命,可以說是重大創新或完全創新,而 Evolution是演化,也就是許多目前的資訊技術,無論是 OS、軟體工程或演算法幾十年前早就存在了,幾十年來不過就是改良或重新包裝,殊不見有什麼叫做 Revolution 的技術,很少。與前一段牛頓所說,所有科學家都是基於前人成就,再加上自己的創見,

而能締造很棒的成就,反觀 CodeBeside就會推翻掉 Code-Behind嗎?答案是不會!因為就“技術角度"而言,它是改良自 Code-Behind 技術,克服了一些 Code-Behind 缺點,並產生一些新優點,就“使用角度"而言,你幾乎感覺不到它有什麼不一樣?不相信...使用過 ASP.NET 1.1 WebForm 和 ASP.NET 3.5 WebForm的人可以告訴我有什麼不一樣嗎,如果你一時之間答不上來,就代表它是一個無痛的改良。

2-3

VS 2008進階功能密技

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

為何微軟必須推出 CodeBeside 來“取代"Code-Behind?勢必有某些問題或因素才必須這樣做,讓我們先來看看 Code-Behind運作的模式:

假設在 VS.NET 2003中建立了一個 WebForm1,則 WebForm1包含了兩個部分: WebForm1.aspx、 WebForm1.aspx.cs 或 WebForm1. aspx.vb,請參考下面的 Code-Behind運作模式圖。

圖 2-1 Code-Behind運作模式圖

Code-Behind運作流程說明如下:

1. WebForm1.aspx.cs或 WebForm1.aspx.vb繼承 Page類別,編譯成專案 dll檔。

2. WebForm1.aspx再繼承上一步驟的 dll檔。

Code-Behind實例說明:

假設在 VS.NET 2003的 WebForm1拖曳一個 TextBox控制項,可看到三個畫面:

2-4

聖殿祭司的 ASP.NET 3.5專家技術手冊 I — 使用 C#

版面配置

圖 2-2 VS.NET 2003控制項配置

HTML的 .aspx檔

圖 2-3 VS.NET 2003的 WebForm HTML程式

Code-Behind檔 .cs或 .vb

圖 2-4 VS.NET 2003 Code-Behind檔(.cs或 .vb)

在這以實例對照 Code-Behind運作模式,探討到底 Code-Behind有什麼樣的問題?簡單講有兩個:

1. 你會發現拖曳一個 TextBox控制項後,在 .aspx檔和 .cs/.vb之中同時都會出現 TextBox的宣告,如此一來會發生同步問題,因為若不小心刪除或更動任一者,例如誤將 .cs或 .vb中的 TextBox刪除,雖然 HTML中的 TextBox宣告仍存在,但因兩邊產生不一致的情況,故會導致錯誤發生。

2-5

VS 2008進階功能密技

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

2. 有的專家認為這是一種奇怪的 design antipattern問題。

故為了改進 Code-Behind的一些缺點,改良後稱之為「CodeBeside」,但這算是全新的嗎?其實不算,在某種程度你可以將之視為 Code-Behind改良、Code-Behind二代,或叫 CodePerfect、CodeHappy也不錯,總之最後設計小組不過就是用個新名字“CodeBeside",沒什麼大不了的,也不值得大驚小怪,但這樣講還是太抽象,祭司用一個公式表達,你就

會比較明瞭:

Code-Behind + partial class 的改良 = CodeBeside

這是一個簡化後的觀點,超簡單的吧!

但在正式介紹 CodeBeside之前,得要先談 .NET Language 3.5(2.0)的 partial class功能,兩者必須一起談,.NET Language 3.5(2.0)支援四種功能:

1. Generic

2. Iterator

3. Anonymous method

4. partial class

那什麼是 partial class呢?也就是可以將一個 Class拆成多個檔,比如說一個 Class類別中有十個 methods方法,在 VS 2008中,你可以將十個 methods方法拆成十個檔案分別存放,為什麼要這樣做呢,有何好處?理由如下:

1. 在一個大型的專案類別 Class,你可以同時分成不同區塊,交由不同程式設計師撰寫,同時進行。

2. 若由系統自動產生的 source code,可以用獨立的 partial class加入,而不必更動到原先類別。

3. 若 class很巨大時,用 partial class來做功能性區分也是一個不錯的分類方式。

2-6

聖殿祭司的 ASP.NET 3.5專家技術手冊 I — 使用 C#

假若有一個“ExampleClass”類別,其中包含了十個 Methods,透過partial class 可以將十個方法拆成十個類別檔 ExampleClassFile1.cs、ExampleClassFile2.cs,一直到 ExampleClassFile10.cs,而每個類別檔中包含一個方法(Method):

檔案一:ExampleClassFile1.cs

public partial class ExampleClass

{

public void Method1()

{

...

}

}

檔案二:ExampleClassFile2.cs

public partial class ExampleClass

{

public void Method2()

{

...

}

}

檔案十:ExampleClassFile10.cs

public partial class ExampleClass

{

public void Method10()

{

...

}

}

最後編譯器在編譯時,它會認得 partial class字眼,並將這十個 partial class合併成一個 ExampleClass。

讓我們來驗證一下 CodeBeside是不是 Code-Behind + partial class?步驟說明如下:

2-7

VS 2008進階功能密技

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

:版面配置

首先在 VS 2008 建立一個 Default.aspx 網頁,在 WebForm 中拖曳一個TextBox控制項,畫面如下。

圖 2-5 VS 2008控制項配置畫面

:檢視 HTML的 .aspx檔

Default.aspx的 CodeBeside檔為 CodeFile= "Default.aspx.cs",所以仍是Code-Behind的運作模式。

圖 2-6 VS 2008的 WebForm HTML程式

:檢視 CodeBeside檔 .cs或 .vb

在 CodeBeside檔 .cs或 .vb中完全看不到 TextBox控制項的宣告,且都是使用 partial class「_Default」來儲存.cs或 .vb檔。並且 HTML也不再使用 Code-Behind字眼,取而代之的是 CodeFile,就是 partial class編譯時會將兩者結合,用起來你不會有什麼感覺,甚至不知道它改了,但它的

確改進了 Code-Behind 一些潛藏的缺點,變得比較清爽,也不會令某些人那麼在意 Code-Behind繼承的奇怪模式。

SStteepp 33

SStteepp 22

SStteepp 11

CodeBeside檔 Partial Class檔

2-8

聖殿祭司的 ASP.NET 3.5專家技術手冊 I — 使用 C#

圖 2-7 CodeBeside檔中的 partial class

範例 2-1 partial class的應用

本範例將示範如何把 partial class技巧應用到 Web網站專案,請參考PartialClass.aspx程式,步驟說明如下:

:建立 partial class類別檔

在此建立十個 partial class 類別檔,分別為 ExampleClassFile1.cs、ExampleClassFile2.cs、ExampleClassFile3.cs...ExampleClassFile10.cs 這十個類別檔,其路徑在 App_Code目錄中,以下為程式碼:

ExampleClassFile1.cs

public partial class ExampleClass

{

public string Method1()

{ return "Partial Class 方法一";

}

}

ExampleClassFile2.cs

public partial class ExampleClass

{

public string Method2()

{ return "Partial Class 方法二";

SStteepp 11

partial class宣告

2-9

VS 2008進階功能密技

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

}

}

ExampleClassFile10.cs

public partial class ExampleClass

{

public string Method10()

{ return "Partial Class 方法十";

}

}

:使用 partial class類別檔

請在 PartialClass.aspx.cs中實體化 ExampleClass類別,接著就可以叫用到 partial class中的十個方法,它們可透過 IntelliSense選取。

圖 2-8 VS 2008使用 partial class類別檔

SStteepp 22

2-10

聖殿祭司的 ASP.NET 3.5專家技術手冊 I — 使用 C#

圖 2-9 partial class執行畫面

最後 partial class不僅止於上面所陳述的種種好處,例如把一個巨大的類別檔拆成好幾個檔案,交由不同程式設計師同時進行開發;舉例來

說,如果您開發自己或公司專案的公用函式庫,若公用函式庫內容愈豐

富,則會愈實用的,但一開始可能是一點一滴累積,這時就可以使用 partial class技巧,每隔一段時期就將新開發的 partial class類別程式,一支一支的往伺服器上載,而不像以前必須將整個巨大的類別程式庫打開,程式

碼往裡面 Copy& Paste,這樣是不是挺方便的呢。

2-2 Code-Behind 2.0 ASP.NET 3.5的 Code-Behind模式是 2.0版,改良自 ASP.NET 1.0的

Code-Behind 模式,而 Code-Behind 2.0 原本在 Beta 版時有個新名字叫「CodeBeside」,但正式發表後仍維持 Code-Behind 2.0 名稱(祭司推測是為了減少開發人員對新名詞的惶恐不安)。Code-Behind 2.0除了 Page指示詞有所改變外,最重大改變是加入了 partial class 機制,以下是 說明:

Page指示詞(directive)

所謂的 Page指示詞(directive)是在 .aspx網頁中的宣告,ASP.NET 1.1的語法如下:

VB

<%@ Page Language="vb" AutoEventWireup="false" Codebehind=

"SamplePage.aspx.vb" Inherits="SampleProject.SamplePage"%>

2-11

VS 2008進階功能密技

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

C#

<%@ Page Language="c#" AutoEventWireup="false" Codebehind=

"SamplePage.aspx.cs" Inherits="SampleProject.SamplePage"%>

而在 Code-Behind 2.0中 Page指示詞語法如下:

VB

<%@ Page language="VB" CodeFile="SamplePage.aspx.vb" Inherits=

"SamplePage" AutoEventWireup="false" %>

C#

<%@ Page language="C#" CodeFile="SamplePage.aspx.cs" Inherits=

"SamplePage" AutoEventWireup="true" %>

您可比較新舊語法中,標示為粗體字的部分就是差異所在,新語法

將 Code-Behind 改為 CodeFile,而 Inherits 指定的類別也不需要命名空間,這是因為 ASP.NET 3.5 Web Form的 Code-Behind類別檔預設根本沒有命名空間的緣故。

而在 partial class部分,也就是 .aspx對應的 CodeFile類別檔之中,也有一些結構上的變化,Code-Behind的 partial class程式如下:

VB

Partial Class SamplePage

Inherits System.Web.UI.Page

Protected Sub Button1_Click(ByVal sender As Object, _

ByVal e As EventArgs) Handles Button1.Click

Label1.Text = "Clicked at " & DateTime.Now.ToString()

End Sub

End Class

C#

using System; public partial class SamplePage : System.Web.UI.Page { protected void Button1_Click(Object sender, EventArgs e) { Label1.Text = "Clicked at " + DateTime.Now.ToString(); } }

2-12

聖殿祭司的 ASP.NET 3.5專家技術手冊 I — 使用 C#

從上面的 Code-Behind 檔中,可以明確看到命名空間消失了,且有“partial class"字眼。

最後總結 Code-Behind 2.0的改良有幾個優點:

1. Code-Behind檔變得更簡潔,只包含使用者加入的程式碼;不似以往每拖曳一個控制項到 .aspx之中,在 Code-Behind中就會產生相對應的控制項宣告,程式略嫌雜亂。

2. 同時也因為在 Code-Behind檔沒有系統產生的控制項宣告,所以不會發生程式設計師誤刪這些宣告,而導致 .aspx網頁發生不一致的錯誤。

3. 使用 partial class技術不但可以多人分工開發一個大類別,並且可以在日後添加新的 partial class類別到專案之中,而專案程式不必手工重新編譯。

2-3 專案設計工具(Project Designer)

VS 2008 有一個非常不錯的工具叫「專案設計工具( Project Designer)」,專案設計工具有許多選項可以方便管理專案的設定,包括了: 應用程式、 建置、 建置事件、 資源、 設定、 參考路徑、

簽署、 Web、 Silverlight應用程式、 程式碼分析,如下圖所示。

圖 2-10 Web專案設計工具

2-13

VS 2008進階功能密技

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

不過專案設計工具必須在 Web應用程式專案才有提供,而 WebSite網站模式下並沒有完整功能。所謂的 Web應用程式專案,就是 Web專案建立是以【檔案】 【新增】 【專案】方式建立,若要呼叫 Web專案設計工具則點選【專案】 【屬性】,即可叫出上圖專案設計工具畫面。

倘若 Web的建立是以【檔案】 【新增】 【網站】,則就無法享

受那麼完整的功能,只有下圖幾個簡單功能。

圖 2-11 Web網站屬性頁工具

專案設計工具在做管理專案設定時非常有用,例如設定資源檔與設

定檔等等,至於如何運用資源檔與設定檔,在第五章的 My物件章節會再提示與 Web專案關係。

2-4 將 ASP.NET程式開發伺服器 Port 固定下來的密技

前面曾提到,若專案存放位置與執行使用「檔案模式」,則網頁執

行時會使用 VS 2008內建的「ASP.NET程式開發伺服器」,如此便解決了作業系統無 IIS伺服器的困擾,但伴隨而來的是有程式設計師會問:「是否能夠將 Port固定下來?」因為變動的 Port,有時要以完整路徑引用參考目錄下的照片或 CSS設定就會產生困擾(例如 /Images/Pic01.jpg或是 /Css/WebSite.css)。

2-14

聖殿祭司的 ASP.NET 3.5專家技術手冊 I — 使用 C#

範例 2-2 將 ASP.NET程式開發伺服器的 Port固定

本範例將說明如何將ASP.NET程式開發伺服器的 Port固定下來之技巧,在此以 WebSite 網站模式為示範,步驟說明如下(必須使用檔案模式,IIS模式無效):

:取消方案之顯示

在 WebSite網站模式下,若要將 Port固定,則必須將方案顯示取消,否則會造成網頁實際檔案路徑抓取不正確,請在【工具】 【選項】 【專

案和方案】 【一般】中,將「永遠顯示方案」取消。

圖 2-12 取消專案之顯示

:加入外部工具設定

請在【工具】 【外部工具】 按【加入】按鈕加入相關設定,輸入下

列設定:

標題:「Web Server Port:8080」。

命令:「C:\Program Files\Common Files\microsoft shared\DevServer\ 9.0\WebDev.WebServer.EXE」

引數:「/port:8080 /path:$(ProjectDir)\」。

完成後請按【確定】按鈕結束設定工作。

SStteepp 22

SStteepp 11

2-15

VS 2008進階功能密技

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

圖 2-13 自訂 ASP.NET程式開發伺服器 Port 8080

:啟動自訂 Web Server伺服器

完成 Step 2步驟後,在【工具】選單中會出現「Web Server Port:8080」選項,請執行該選項以啟動自訂 Web Server伺服器,啟動完成後,後在視窗右下角會出現「ASP.NET程式開發伺服器」圖示,訊息顯示的正是Port:8080。

圖 2-14 啟動 Web Server Port:8080

SStteepp 33

2-16

聖殿祭司的 ASP.NET 3.5專家技術手冊 I — 使用 C#

:設定專案使用自定 Web Server伺服器

最後一道工作是將 Web網站設定成自訂的 Web Server伺服器,請在網站上按滑鼠右鍵,選擇【屬性頁】 【起始選項】 【使用自定伺服器】,

在基礎 URL輸入「http://localhost:8080」,如此便大功告成。

圖 2-15 設定網站使用自訂的 Web伺服器

完成後請執行網頁,在網址列中可以看到「http://localhost:8080/」字樣,表示 ASP.NET程式開發伺服器正是以 Port:8080在執行,故日後要測試網頁,可直接在網址列輸入「http://localhost:8080/Default.aspx」就可以了,這是動態 Port所做不到的。

圖 2-16 固定 Web Server Port

SStteepp 44

輸入自訂

伺服器

URL