第 11 章 asp.net的web應用程式

54
11 11 ASP.NET ASP.NET Web Web 第第第第 第第第第 11-1 ASP.NET 11-1 ASP.NET 第第第第第第第 第第第第第第第 11-2 Global.asax 11-2 Global.asax 第第第第 第第第第 11-3 Application 11-3 Application 第第第第第第第 第第第第第第第 11-4 Session 11-4 Session 第第第第第第第 第第第第第第第 11-5 Application 11-5 Application Session Session 第第第第第 第第第第第 11-6 11-6 第第第第第第 第第第第第第 Web Web 第第第第 第第第第 11-7 11-7 第第 第第 web.config web.config 第第第 第第第 11-8 ASP.NET 2.0 11-8 ASP.NET 2.0 第第第第第第第 第第第第第第第

Upload: viveca

Post on 21-Jan-2016

58 views

Category:

Documents


0 download

DESCRIPTION

第 11 章 ASP.NET的Web應用程式. 11-1 ASP.NET 應用程式的基礎 11-2 Global.asax 檔的使用 11-3 Application 物件的狀態管理 11-4 Session 物件的狀態管理 11-5 Application 與 Session 物件的使用 11-6 在網頁間傳遞 Web 表單內容 11-7 使用 web.config 組態檔 11-8 ASP.NET 2.0 的網站設定工具. 11-1 ASP.NET應用程式的基礎. 11-1-1 ASP.NET 的 Web 應用程式 11-1-2 網頁間資料分享的基礎 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 11 章  ASP.NET的Web應用程式

第第 1111 章 章 ASP.NETASP.NET的的 WebWeb應用應用程式程式

11-1 ASP.NET11-1 ASP.NET 應用程式的基礎應用程式的基礎 11-2 Global.asax11-2 Global.asax 檔的使用檔的使用 11-3 Application11-3 Application 物件的狀態管理物件的狀態管理 11-4 Session11-4 Session 物件的狀態管理物件的狀態管理 11-5 Application11-5 Application與與 SessionSession 物件的使用物件的使用 11-6 11-6 在網頁間傳遞在網頁間傳遞 WebWeb 表單內容表單內容 11-7 11-7 使用使用 web.configweb.config 組態檔組態檔 11-8 ASP.NET 2.011-8 ASP.NET 2.0 的網站設定工具的網站設定工具

Page 2: 第 11 章  ASP.NET的Web應用程式

11-1 ASP.NET11-1 ASP.NET應用程式的基礎應用程式的基礎 11-1-1 ASP.NET11-1-1 ASP.NET的的WebWeb 應用程式應用程式 11-1-2 11-1-2 網頁間資料分享的基礎網頁間資料分享的基礎 11-1-3 11-1-3 網頁間的資料傳遞方法網頁間的資料傳遞方法

Page 3: 第 11 章  ASP.NET的Web應用程式

11-1-1 ASP.NET11-1-1 ASP.NET的的 WebWeb 應用程式應用程式 ASP.NETASP.NET 應用程式是一種應用程式是一種 .NET .NET

FrameworkFramework 應用程式,它是在應用程式,它是在 WebWeb 伺服伺服器上執行的應用程式,稱為器上執行的應用程式,稱為 WebWeb 應用程式。應用程式。ASP.NETASP.NET 應用程式就是應用程式就是 HttpApplicationHttpApplication類別的物件,負責處理應用程式的類別的物件,負責處理應用程式的 HTTPHTTP請求。請求。

在在 IISIIS的的WebWeb 伺服器能夠將整個網站,或伺服器能夠將整個網站,或指定網站目錄建立成指定網站目錄建立成 WebWeb 應用程式。應用程式。 IISIIS能夠在同一個網站建立多個能夠在同一個網站建立多個 WebWeb 應用程式,應用程式,每一個虛擬目錄都可以建立成為每一個虛擬目錄都可以建立成為 WebWeb 應用應用程式。程式。

Page 4: 第 11 章  ASP.NET的Web應用程式

11-1-2 11-1-2 網頁間資料分享的基礎網頁間資料分享的基礎 - - SessionSession 期間期間

ASP.NETASP.NET的的【【 SessionSession 期間期間】】是指是指 WebWeb應用程式從一頁應用程式從一頁 ASP.NETASP.NET 網頁移到其他網頁移到其他ASP.NETASP.NET 網頁過程中所花費的時間,並不網頁過程中所花費的時間,並不是指第是指第 11-411-4 節的節的 SessionSession 物件。物件。

在在 ASP.NETASP.NET 是使用是使用Sytem.Web.SessionStateSytem.Web.SessionState 名稱空間的類名稱空間的類別來管理別來管理 SessionSession 期間的資訊,也就是建期間的資訊,也就是建立立 SessionSession 物件來保留物件來保留 SessionSession 期間的資期間的資料。料。

Page 5: 第 11 章  ASP.NET的Web應用程式

11-1-2 11-1-2 網頁間資料分享的基礎網頁間資料分享的基礎 -- 網網站的資料分享站的資料分享

當使用者進入網站,如果是會員管理網站,在登當使用者進入網站,如果是會員管理網站,在登入後可以取得使用者的瀏覽權限,但是伺服端並入後可以取得使用者的瀏覽權限,但是伺服端並不知道目前客戶端有哪些使用者正在瀏覽,和其不知道目前客戶端有哪些使用者正在瀏覽,和其使用狀態。因為使用者在移至其他網頁時,使用使用狀態。因為使用者在移至其他網頁時,使用者登入資料並不會自動傳給下一頁網頁。者登入資料並不會自動傳給下一頁網頁。

資料分享主要分為兩種,如下所示:資料分享主要分為兩種,如下所示:• 分享給網站所有使用者:在分享給網站所有使用者:在 ASP.NETASP.NET 程式可以使用程式可以使用

ApplicationApplication 變數進行分享,例如:目前線上的使用者變數進行分享,例如:目前線上的使用者數。數。

• 每位使用者的專屬資料:在每位使用者的專屬資料:在 ASP.NETASP.NET 程式可以使用程式可以使用SessionSession 變數進行分享,例如:登入使用者的權限。變數進行分享,例如:登入使用者的權限。

Page 6: 第 11 章  ASP.NET的Web應用程式

11-1-3 11-1-3 網頁間的資料傳遞方法網頁間的資料傳遞方法 -- 說說明明

在在 ASP.NETASP.NET 程式間的資料傳遞方法,換個程式間的資料傳遞方法,換個角度來說,就是如何保留使用者狀態的方角度來說,就是如何保留使用者狀態的方法,稱為「狀態管理」(法,稱為「狀態管理」( State State ManagementManagement )。)。

以資料儲存的位置分為兩大類:以資料儲存的位置分為兩大類:• 客戶端客戶端• 伺服端伺服端

Page 7: 第 11 章  ASP.NET的Web應用程式

11-1-3 11-1-3 網頁間的資料傳遞方法網頁間的資料傳遞方法 -- 客客戶端的狀態管理戶端的狀態管理

客戶端的狀態管理是將資料儲存在使用者客戶端的狀態管理是將資料儲存在使用者電腦,或是直接儲存在電腦,或是直接儲存在 ASP.NETASP.NET 程式建立程式建立的網頁中,如下表所示:的網頁中,如下表所示:狀態管理方法 說明

Cookies Cookies是保留在使用者電腦的小檔案,檔案內容是一些使用者資訊

ViewState ASP.NET的 ViewState功能,在表單送回時能夠在網頁使用 ViewState屬性保留使用者資料

隱藏欄位 使用表單隱藏欄位送回表單資料或傳遞資料到其他網頁QueryString集合物

件使用網址 URL參數,即在 URL網址加上參數,將資料

傳遞給其他網頁

Page 8: 第 11 章  ASP.NET的Web應用程式

11-1-3 11-1-3 網頁間的資料傳遞方法網頁間的資料傳遞方法 -- 伺伺服端的狀態管理服端的狀態管理

伺服端的狀態管理是將資料儲存在伺服器伺服端的狀態管理是將資料儲存在伺服器電腦,換句話說,它會佔用電腦,換句話說,它會佔用 WebWeb 伺服器的伺服器的系統資源,如下表所示:系統資源,如下表所示:狀態管理方法 說明

Application物件 使用 Application物件的變數儲存使用者資訊Session物件 使用 Session物件的變數儲存使用者資訊資料庫 使用資料庫的記錄儲存使用者資訊

XML文件或文字檔案 使用 XML文件或文字檔案儲存使用者資訊Profile物件 使用 HttpModules類別的 Profile物件儲存使用者資訊,這

是 ASP.NET 2.0版新功能,詳細說明,請參閱第 14章

Page 9: 第 11 章  ASP.NET的Web應用程式

11-2 Global.asax11-2 Global.asax 檔的使用檔的使用 11-2-1 Global.asax11-2-1 Global.asax 檔案的架構檔案的架構 11-2-2 Global.asax11-2-2 Global.asax 檔案的使用檔案的使用

Page 10: 第 11 章  ASP.NET的Web應用程式

11-2-1 Global.asax11-2-1 Global.asax 檔案的架構檔案的架構 -- 新新增增 Global.asaxGlobal.asax 檔案檔案

ASP.NETASP.NET的的 Global.asaxGlobal.asax 檔案是檔案是 ANSIANSI 文字檔案,文字檔案,使用使用 WindowsWindows 記事本或記事本或 VWDVWD 都可以編輯都可以編輯Global.asaxGlobal.asax 檔案內容。檔案內容。

Visual Web DeveloperVisual Web Developer 可以新增可以新增 Global.asaxGlobal.asax檔案。請啟動檔案。請啟動 VWDVWD 開啟「開啟「 Ch11Ch11 」網站後,執」網站後,執行「檔案行「檔案 // 新增新增 // 檔案」指令,可以看到「加入新檔案」指令,可以看到「加入新項目」對話方塊。項目」對話方塊。

Page 11: 第 11 章  ASP.NET的Web應用程式

11-2-1 Global.asax11-2-1 Global.asax 檔案的架構檔案的架構 --Global.asaxGlobal.asax 檔案架構檔案架構

<%@ Application Language="VB" %><%@ Application Language="VB" %><script Runat="server"><script Runat="server">Sub Application_Start(ByVal Sender As Object, _Sub Application_Start(ByVal Sender As Object, _ ByVal E As EventArgs)ByVal E As EventArgs)End SubEnd SubSub Application_End(ByVal Sender As Object, _Sub Application_End(ByVal Sender As Object, _ ByVal E As EventArgs)ByVal E As EventArgs)End SubEnd SubSub Application_Error(ByVal Sender As Object, _Sub Application_Error(ByVal Sender As Object, _ ByVal E As EventArgs)ByVal E As EventArgs)End SubEnd SubSub Session_Start(ByVal sender As Object, _Sub Session_Start(ByVal sender As Object, _ ByVal e As EventArgs)ByVal e As EventArgs)End SubEnd SubSub Session_End(ByVal sender As Object, _Sub Session_End(ByVal sender As Object, _ ByVal e As EventArgs)ByVal e As EventArgs)End SubEnd Sub</script></script>

Page 12: 第 11 章  ASP.NET的Web應用程式

11-2-1 Global.asax11-2-1 Global.asax 檔案的架構檔案的架構 -- 說說明明

事件處理程序 說明Application_Start() 當第 1位使用者進入 ASP.NET程式時,Application_Start

事件就觸發,在觸發後,就算有成千上萬位使用者進入網站都不會重新觸發,除非Web伺服器關機。通常用來

初始 Application變數,例如:初始的訪客計數Application_End() 當Web伺服器關機,Application_End事件就會觸發Application_Error() 產生未能處理錯誤時,觸發 Application_Error事件

Session_Start() 當使用者建立 Session期間時,就觸發 Session_Star事件,如果有 50位使用者,就觸發 50次事件,每個事件是獨立觸發,不會互相影響,通常是用來初始使用者專屬的

Session變數Session_End() 使用者在預設時間內沒有進入其他 ASP.NET程式,就會

觸發此事件,時間是由 TimeOut屬性設定,通常是善後用途的程式碼,例如:將 Session變數存入資料庫或文字

檔案

Page 13: 第 11 章  ASP.NET的Web應用程式

11-2-2 Global.asax11-2-2 Global.asax 檔案的使用檔案的使用 -- 執執行順序行順序 11

當使用者請求當使用者請求 ASP.NETASP.NET 程式後,就會替每位使程式後,就會替每位使用者建立用者建立 SessionSession 期間和期間和 ApplicationApplication 物件,接物件,接著檢查著檢查 ASP.NETASP.NET 應用程式是否擁有應用程式是否擁有Global.asaxGlobal.asax 檔案。檔案。

如果有如果有 Global.asaxGlobal.asax 檔案,就將它編譯成繼承檔案,就將它編譯成繼承HttpApplicationHttpApplication 類別的物件,然後在執行類別的物件,然後在執行ASP.NETASP.NET 檔案的程式碼前觸發檔案的程式碼前觸發Application_StartApplication_Start 事件,執行事件,執行 Global.asaxGlobal.asax 檔檔案的案的 Application_Start()Application_Start() 事件處理程序,接著事件處理程序,接著建立建立 SessionSession 物件,因為物件,因為 Global.asaxGlobal.asax 檔案存在,檔案存在,接著執行接著執行 Session_Start()Session_Start() 事件處理程序。事件處理程序。

Page 14: 第 11 章  ASP.NET的Web應用程式

11-2-2 Global.asax11-2-2 Global.asax 檔案的使用檔案的使用 -- 執執行順序行順序 22

當當 SessionSession 期間超過期間超過 TimeOutTimeOut 屬性的設定(預屬性的設定(預設設 2020 分鐘)或執行分鐘)或執行 Abandon()Abandon() 方法,表示方法,表示SessionSession 期間結束,就觸發期間結束,就觸發 Session_EndSession_End 執行執行Session_End()Session_End() 事件處理程式,處理程序是在關事件處理程式,處理程序是在關閉閉 SessionSession 物件前執行。物件前執行。

WebWeb 伺服器如果關機,在關閉伺服器如果關機,在關閉 ApplicationApplication 物件物件前就會執行前就會執行 Application_End()Application_End() 事件處理程序,事件處理程序,當然也會結束所有使用者的當然也會結束所有使用者的 SessionSession 期間,和執期間,和執行所有使用者的行所有使用者的 Session_End()Session_End() 事件處理程序。事件處理程序。

Page 15: 第 11 章  ASP.NET的Web應用程式

11-3 Application11-3 Application 物件的狀態管物件的狀態管理理

11-3-1 Application11-3-1 Application 物件的基礎物件的基礎 11-3-2 11-3-2 網站的訪客計數網站的訪客計數

Page 16: 第 11 章  ASP.NET的Web應用程式

11-3-1 Application11-3-1 Application 物件的基礎物件的基礎 -- 什什麼是麼是 ApplicationApplication 物件物件

ApplicationApplication 物件可以建立物件可以建立 ApplicationApplication 變變數,它和一般程式變數不同,數,它和一般程式變數不同, ApplicationApplication變數是一個變數是一個 ContentsContents 集合物件,此變數集合物件,此變數可以提供造訪網站的每位使用者一個分享可以提供造訪網站的每位使用者一個分享資料的管道,因為資料的管道,因為 ApplicationApplication 變數允許變數允許網站每位使用者取得或更改其值。網站每位使用者取得或更改其值。

ApplicationApplication 物件是在第物件是在第 11 個個 SessionSession 物物件建立後建立,件建立後建立, ApplicationApplication 物件的範圍物件的範圍直到直到 WebWeb 伺服器關機或所有的使用者都離伺服器關機或所有的使用者都離線後才會刪除。線後才會刪除。

Page 17: 第 11 章  ASP.NET的Web應用程式

11-3-1 Application11-3-1 Application 物件的基礎物件的基礎 --ApplicationApplication 變數的使用變數的使用

不論網站有多少位使用者同時瀏覽網站不論網站有多少位使用者同時瀏覽網站(不是指登入網站的使用者),在伺服端(不是指登入網站的使用者),在伺服端記憶體只保留一份記憶體只保留一份 ApplicationApplication 變數,其變數,其變數格式如下:變數格式如下:Application("HitCounter") = 1234Application("HitCounter") = 1234

上述程式碼將名為上述程式碼將名為 Hit_CounterHit_Counter的的ApplicationApplication 變數設為變數設為 12341234 ,此變數和,此變數和ASP.NETASP.NET 程式變數不一樣,它是取得程式變數不一樣,它是取得ContentsContents 集合物件的元素,變數名稱是字集合物件的元素,變數名稱是字串。串。

Page 18: 第 11 章  ASP.NET的Web應用程式

11-3-1 Application11-3-1 Application 物件的基礎物件的基礎 --ApplicationApplication 狀態管理的同步狀態管理的同步

ASP.NETASP.NET 應用程式的每位使用者都可以存取應用程式的每位使用者都可以存取ApplicationApplication 變數,使用者可以同時讀取變數,使用者可以同時讀取ApplicationApplication 變數,但是如果有一位更改資料,變數,但是如果有一位更改資料,其他讀取資料,此時資料衝突情況就會發生,為其他讀取資料,此時資料衝突情況就會發生,為了避免此情況,需要考慮同步問題。了避免此情況,需要考慮同步問題。

在在 ApplicationApplication 物件提供物件提供 Lock()Lock()和和 Unlock()Unlock() 方方法,可以保障在同一時間內,只允許一位使用者法,可以保障在同一時間內,只允許一位使用者存取存取 ApplicationApplication 變數,其程式碼如下所示:變數,其程式碼如下所示:Application.Lock()Application.Lock()Application("HitCounter")= _Application("HitCounter")= _ Application("HitCounter")+1Application("HitCounter")+1Application.Unlock()Application.Unlock()

Page 19: 第 11 章  ASP.NET的Web應用程式

11-3-2 11-3-2 網站的訪客計數網站的訪客計數 -- 說明說明 網站的訪客計數是一種必備元件,其目的是顯示網站的訪客計數是一種必備元件,其目的是顯示

有多少位訪客曾經瀏覽網站,顯示資訊可以從開有多少位訪客曾經瀏覽網站,顯示資訊可以從開站以來的訪客數,或一段時間內的訪客數。站以來的訪客數,或一段時間內的訪客數。

ASP.NETASP.NET 的訪客計數是在的訪客計數是在 Global.asaxGlobal.asax 檔案的檔案的Session_Start()Session_Start() 事件處理程序,使用事件處理程序,使用ApplicationApplication 變數記錄訪客計數,如下所示:變數記錄訪客計數,如下所示:Application("HitCounter")= _Application("HitCounter")= _

Application("HitCounter")+1Application("HitCounter")+1 上述上述 ApplicationApplication 變數記錄目前的訪客計數,別變數記錄目前的訪客計數,別忘了!使用忘了!使用 Lock()Lock()和和 Unlock()Unlock() 方法。方法。

Page 20: 第 11 章  ASP.NET的Web應用程式

11-3-2 11-3-2 網站的訪客計數網站的訪客計數 --圖例圖例

Page 21: 第 11 章  ASP.NET的Web應用程式

11-4 Session11-4 Session 物件的狀態管理物件的狀態管理 11-4-1 Session11-4-1 Session 物件的基礎物件的基礎 11-4-2 11-4-2 目前有多少人在線上目前有多少人在線上

Page 22: 第 11 章  ASP.NET的Web應用程式

11-4-1 Session11-4-1 Session 物件的基礎物件的基礎 -- 什麼是什麼是SessionSession 物件物件

每一個每一個 SessionSession 物件擁有唯一的物件擁有唯一的 Session Session IDID 編號,在整個瀏覽編號,在整個瀏覽 ASP.NETASP.NET 應用程式應用程式的過程(造訪不同的過程(造訪不同 ASP.NETASP.NET 程式時),都程式時),都可以存取可以存取 SessionSession 物件建立的變數。物件建立的變數。

在在 ASP.NETASP.NET的的WebWeb 應用程式是使用應用程式是使用Session IDSession ID 判斷使用者是否仍在判斷使用者是否仍在 SessionSession期間,它是直到期間,它是直到 SessionSession 物件物件 TimeOutTimeOut屬性設定時間到時(預設值屬性設定時間到時(預設值 2020 分鐘),或分鐘),或執行執行 Abandon()Abandon() 方法後才會結束方法後才會結束 SessionSession期間。期間。

Page 23: 第 11 章  ASP.NET的Web應用程式

11-4-1 Session11-4-1 Session 物件的基礎物件的基礎 --SessionSession 變數的使用變數的使用

SessionSession 變數是使用者的專屬資料,雖然每位使變數是使用者的專屬資料,雖然每位使用者的用者的 SessionSession 變數名稱相同,但是值可能不同。變數名稱相同,但是值可能不同。而且只有該位使用者才能存取自己的而且只有該位使用者才能存取自己的 SessionSession 變變數。數。

例如:使用者例如:使用者 hueyanhueyan 進入網站,建立進入網站,建立 SessionSession變數的程式碼如下:變數的程式碼如下:

Session("username") = "hueyan"Session("username") = "hueyan"Session("password") = "1234"Session("password") = "1234" 上述上述 SessionSession 變數屬於使用者變數屬於使用者 hueyanhueyan 。接著另。接著另

一位使用者一位使用者 janejane 也進入網站,也會替他建立一組也進入網站,也會替他建立一組SessionSession 變數,其程式碼如下:變數,其程式碼如下:

Session("username") = "jane"Session("username") = "jane"Session("password") = "4567"Session("password") = "4567"

Page 24: 第 11 章  ASP.NET的Web應用程式

11-4-2 11-4-2 目前有多少人在線上目前有多少人在線上 訪客計數是歷史記錄,線上使用者數是目前的即訪客計數是歷史記錄,線上使用者數是目前的即

時狀態,如果想知道目前有多少位使用者停留在時狀態,如果想知道目前有多少位使用者停留在網站?其最大問題是如何判斷使用者目前仍在線網站?其最大問題是如何判斷使用者目前仍在線上,我們可以指定上,我們可以指定 TimeOutTimeOut 屬性,以停留在網屬性,以停留在網站多久時間來判斷是否為線上使用者,如下所示:站多久時間來判斷是否為線上使用者,如下所示:Session.TimeOut = 5Session.TimeOut = 5

上述程式碼指定值是分鐘,也就是說停留上述程式碼指定值是分鐘,也就是說停留 55 分鐘分鐘的使用者算是目前線上的使用者,不的使用者算是目前線上的使用者,不過,過, Application_Start()Application_Start() 事件處理程序並不能事件處理程序並不能指定指定 TimeOutTimeOut 屬性,它是位在屬性,它是位在 Session_Start()Session_Start()事件處理程序。事件處理程序。

Page 25: 第 11 章  ASP.NET的Web應用程式

11-5 Application11-5 Application與與 SessionSession 物件的物件的使用使用

11-5-1 11-5-1 正確使用正確使用 ApplicationApplication和和 SessionSession 變數變數 11-5-2 11-5-2 使用使用 ApplicationApplication和和 SessionSession 物件儲存物件儲存

物件物件

Page 26: 第 11 章  ASP.NET的Web應用程式

11-5-1 11-5-1 正確使用正確使用 ApplicationApplication和和SessionSession 變數變數

SessionSession 變數不同於變數不同於 ApplicationApplication 變數,變數,其儲存資料是使用者專屬資料,換句話說,其儲存資料是使用者專屬資料,換句話說,除非是使用者相關資料,否則使用除非是使用者相關資料,否則使用SessionSession 變數只是浪費伺服器的記憶體資變數只是浪費伺服器的記憶體資源。源。

SessionSession 變數的目的是儲存使用者專屬資變數的目的是儲存使用者專屬資料,對於固定內容的變數,應該使用料,對於固定內容的變數,應該使用ApplicationApplication 變數,因為變數,因為 ApplictionAppliction 變數變數是分享給所有使用者。是分享給所有使用者。

Page 27: 第 11 章  ASP.NET的Web應用程式

11-5-2 11-5-2 使用使用 ApplicationApplication和和 SessionSession物件儲存物件物件儲存物件

ApplicationApplication和和 SessionSession 變數可以用來儲存變數可以用來儲存HashtableHashtable 集合物件,如下所示:集合物件,如下所示:Dim userArray As Hashtable = New Hashtable(5)Dim userArray As Hashtable = New Hashtable(5)

Application("UserList") = userArrayApplication("UserList") = userArray 不只如此,還可以儲存不只如此,還可以儲存 ADO.NETADO.NET的的 DataViewDataView

物件,如下所示:物件,如下所示:Dim objView As DataView= _Dim objView As DataView= _

New DataView(objDs.Tables(0))New DataView(objDs.Tables(0))

Application("Source") = objViewApplication("Source") = objView

Page 28: 第 11 章  ASP.NET的Web應用程式

11-6 11-6 在網頁間傳遞在網頁間傳遞 WebWeb 表單內表單內容容

11-6-1 11-6-1 使用使用 URLURL 參數參數 11-6-2 11-6-2 使用使用 SessionSession 變數變數 11-6-3 11-6-3 使用使用 WebWeb 表單的類別屬性表單的類別屬性 11-6-4 11-6-4 使用使用 PreviousPagePreviousPage 物件物件

Page 29: 第 11 章  ASP.NET的Web應用程式

11-6-1 11-6-1 使用使用 URLURL 參數參數 -- 說明說明 舊版舊版 ASPASP 的網頁間資料傳遞除了使用表單的網頁間資料傳遞除了使用表單外,還可以使用外,還可以使用 URLURL 網址參數來傳遞資料,網址參數來傳遞資料,在接收網頁是使用在接收網頁是使用 QueryStringQueryString 集合物件集合物件取得傳遞值,其優點是簡單,但問題是瀏取得傳遞值,其優點是簡單,但問題是瀏覽程式網址欄會顯示傳遞值。覽程式網址欄會顯示傳遞值。

筆者準備建立擁有筆者準備建立擁有 22 個步驟的個步驟的 WebWeb 表單,表單,在輸入使用者名稱和密碼後,按在輸入使用者名稱和密碼後,按【【下一下一步步】】鈕在第二頁鈕在第二頁 ASP.NETASP.NET 程式顯示使用者程式顯示使用者資料。資料。

Page 30: 第 11 章  ASP.NET的Web應用程式

11-6-1 11-6-1 使用使用 URLURL 參數參數 --步驟一步驟一 在步驟一的在步驟一的 WebWeb 表單擁有表單擁有 22 個個 TextBoxTextBox控制項,控制項,

可以輸入使用者資料,按可以輸入使用者資料,按【【下一步下一步】】鈕執行鈕執行GotoNextStep()GotoNextStep() 事件處理程序,如下所示:事件處理程序,如下所示:

Sub GotoNextStep(Sender As Object, E As Sub GotoNextStep(Sender As Object, E As Eventargs)Eventargs)

Dim url As StringDim url As String

url = "Ch11-6-1Second.aspx?username=" & _url = "Ch11-6-1Second.aspx?username=" & _

user.Text & "&password=" & _user.Text & "&password=" & _

pass.Textpass.Text

Response.Redirect(url)Response.Redirect(url)

End SubEnd Sub

Page 31: 第 11 章  ASP.NET的Web應用程式

11-6-1 11-6-1 使用使用 URLURL 參數參數 --步驟二步驟二 在步驟二在步驟二 ASP.NETASP.NET 程式的程式的 Page_Load()Page_Load()

事件處理程序,可以使用事件處理程序,可以使用 QueryStringQueryString 集集合物件取得參數值,如下所示:合物件取得參數值,如下所示:

Sub Page_Load(Sender As Object, _Sub Page_Load(Sender As Object, _ E As Eventargs)E As Eventargs) name.Text = _name.Text = _ Request.QueryString("username")Request.QueryString("username") pass.Text = _pass.Text = _ Request.QueryString("password")Request.QueryString("password")End SubEnd Sub

Page 32: 第 11 章  ASP.NET的Web應用程式

11-6-2 11-6-2 使用使用 SessionSession 變數變數 --步驟步驟一一

步驟一的步驟一的 WebWeb 表單擁有表單擁有 22 個個 TextBoxTextBox控制項,控制項,可以輸入使用者資料,按可以輸入使用者資料,按【【下一步下一步】】鈕執行鈕執行GotoNextStep()GotoNextStep() 事件處理程序,如下所示:事件處理程序,如下所示:

Sub GotoNextStep(Sender As Object, _Sub GotoNextStep(Sender As Object, _

E As Eventargs)E As Eventargs)

Session("UserName") = user.TextSession("UserName") = user.Text

Session("Password") = pass.TextSession("Password") = pass.Text

Response.Redirect( _Response.Redirect( _

"Ch11-6-2Second.aspx")"Ch11-6-2Second.aspx")

End SubEnd Sub

Page 33: 第 11 章  ASP.NET的Web應用程式

11-6-2 11-6-2 使用使用 SessionSession 變數變數 --步驟步驟二二

在步驟二在步驟二 ASP.NETASP.NET 程式的程式的 Page_Load()Page_Load() 事件處事件處理程序,使用理程序,使用 SessionSession 變數取得傳遞的變數值,變數取得傳遞的變數值,如下所示:如下所示:

Sub Page_Load(Sender As Object, _Sub Page_Load(Sender As Object, _

E As Eventargs)E As Eventargs)

name.Text = Session("UserName")name.Text = Session("UserName")

pass.Text = Session("Password")pass.Text = Session("Password")

Session.Remove("UserName")Session.Remove("UserName")

Session.Remove("Password")Session.Remove("Password")

End SubEnd Sub

Page 34: 第 11 章  ASP.NET的Web應用程式

11-6-3 11-6-3 使用使用 WebWeb 表單的類別屬性表單的類別屬性 --定義定義 PagePage 類別的屬性類別的屬性

WebWeb 表單可以使用表單可以使用 PagePage 類別屬性來傳遞表單資料。我類別屬性來傳遞表單資料。我們可以使用們可以使用 PagePage 指引的指引的 ClassNameClassName 屬性指定類別名稱,屬性指定類別名稱,如下所示:如下所示:

<%@ Page Language="VB" <%@ Page Language="VB" ClassName="firstStepClass" %>ClassName="firstStepClass" %> PagePage 指引的指引的 CalssNameCalssName 屬性指定類別名稱是屬性指定類別名稱是

firstStepClassfirstStepClass ,接著可以使用,接著可以使用 PropertyProperty 指令定義類別指令定義類別的屬性,如下所示:的屬性,如下所示:

Public ReadOnly Property UserName() As StringPublic ReadOnly Property UserName() As String GetGet Return user.TextReturn user.Text End GetEnd GetEnd PropertyEnd Property

Page 35: 第 11 章  ASP.NET的Web應用程式

11-6-3 11-6-3 使用使用 WebWeb 表單的類別屬性表單的類別屬性 --步驟一步驟一

步驟一的步驟一的 WebWeb 表單擁有表單擁有 22 個個 TextBoxTextBox控制項,控制項,可以輸入使用者資料,程式開頭的可以輸入使用者資料,程式開頭的 PagePage 指引指指引指令,如下所示:令,如下所示:

<%@ Page Language="VB" <%@ Page Language="VB" ClassName="firstStepClass" %>ClassName="firstStepClass" %>

按按【【下一步下一步】】鈕執行鈕執行 GotoNextStep()GotoNextStep() 事件處理事件處理程序,在程序,在 <script><script>標籤的程式碼建立標籤的程式碼建立 22 個屬性個屬性UserNameUserName和和 PasswordPassword ,屬性值是,屬性值是 TextBoxTextBox控制項的控制項的 TextText 屬性,最後屬性,最後 GotoNextStep()GotoNextStep() 程程序使用序使用 Server.Transfer()Server.Transfer() 方法轉址至步驟二的方法轉址至步驟二的ASP.NETASP.NET 程式。程式。

Page 36: 第 11 章  ASP.NET的Web應用程式

11-6-3 11-6-3 使用使用 WebWeb 表單的類別屬性表單的類別屬性 --步驟二步驟二

步驟二步驟二 ASP.NETASP.NET 程式的開頭是程式的開頭是 ReferenceReference 指引,指引,如下所示:如下所示:

<%@ Reference Page="Ch11-6-3.aspx" %><%@ Reference Page="Ch11-6-3.aspx" %> Page_Load()Page_Load() 事件處理程序可以取得屬性值,如事件處理程序可以取得屬性值,如

下所示:下所示:Sub Page_Load(Sender As Object, E As Eventargs)Sub Page_Load(Sender As Object, E As Eventargs) If Not IsPostBack ThenIf Not IsPostBack Then Dim fs As firstStepClass = Context.HandlerDim fs As firstStepClass = Context.Handler name.Text = fs.UserNamename.Text = fs.UserName pass.Text = fs.Passwordpass.Text = fs.Password End IfEnd IfEnd SubEnd Sub

Page 37: 第 11 章  ASP.NET的Web應用程式

11-6-4 11-6-4 使用使用 PreviousPagePreviousPage 物件物件 --步驟一步驟一

ASP.NET 2.0ASP.NET 2.0 版可以使用版可以使用 PreviusPagePreviusPage物件執行跨物件執行跨 ASP.NETASP.NET 程式的程式的 WebWeb 表單送表單送回。回。

步驟一的步驟一的 WebWeb 表單擁有表單擁有 22 個個 TextBoxTextBox 控控制項,可以輸入使用者資料,在制項,可以輸入使用者資料,在 ButtonButton 控控制項使用制項使用 PostBackUrlPostBackUrl 屬性指定送回的屬性指定送回的ASP.NETASP.NET 程式,如下所示:程式,如下所示:

<asp:Button Id="Button" Text="<asp:Button Id="Button" Text=" 下一步下一步 " "

Runat="server“Runat="server“

PostBackUrl="Ch11-6-4Second.aspx"/>PostBackUrl="Ch11-6-4Second.aspx"/>

Page 38: 第 11 章  ASP.NET的Web應用程式

11-6-4 11-6-4 使用使用 PreviousPagePreviousPage 物件物件 --步驟二步驟二

在步驟二在步驟二 ASP.NETASP.NET 程式的程式的 Page_Load()Page_Load() 事件處事件處理程序,使用理程序,使用 FindControl()FindControl() 方法取得前一頁方法取得前一頁ASP.NETASP.NET 的控制項,如下所示:的控制項,如下所示:

Sub Page_Load(Sender As Object, E As Eventargs)Sub Page_Load(Sender As Object, E As Eventargs) If Not IsPostBack ThenIf Not IsPostBack Then Dim txt As TextBoxDim txt As TextBox txt = PreviousPage.FindControl("user")txt = PreviousPage.FindControl("user") name.Text = txt.Textname.Text = txt.Text txt = PreviousPage.FindControl("pass")txt = PreviousPage.FindControl("pass") pass.Text = txt.Textpass.Text = txt.Text End IfEnd IfEnd SubEnd Sub

Page 39: 第 11 章  ASP.NET的Web應用程式

11-7 11-7 使用使用 web.configweb.config 組態檔組態檔 11-7-1 Web11-7-1 Web 組態檔的基礎組態檔的基礎 11-7-2 appSettings11-7-2 appSettings與與 connectionStringsconnectionStrings區區段的參數和連結字串段的參數和連結字串

11-7-3 11-7-3 在在 sessionStatesessionState區段設定區段設定 SessionSession 狀狀態態

11-7-4 globalization11-7-4 globalization 區段的編碼設定區段的編碼設定 11-7-5 compilation11-7-5 compilation 區段的編譯設定區段的編譯設定 11-7-6 customErrors11-7-6 customErrors區段的自訂錯誤網頁區段的自訂錯誤網頁

Page 40: 第 11 章  ASP.NET的Web應用程式

11-7-1 Web11-7-1 Web 組態檔的基礎組態檔的基礎 -- 說明說明 WebWeb 組態檔組態檔 web.configweb.config是是 ASP.NETASP.NET技術技術WebWeb

應用程式的資源設定檔案,它是一份應用程式的資源設定檔案,它是一份 XMLXML 文件,文件,內含內含WebWeb 應用程式相關設定的應用程式相關設定的 XMLXML標籤,可以標籤,可以用來簡化用來簡化 ASP.NETASP.NET 應用程式的相關設定。應用程式的相關設定。

WebWeb 組態檔組態檔 web.configweb.config 是位在是位在 WebWeb 應用程式應用程式的任何目錄,子目錄如果沒有的任何目錄,子目錄如果沒有 web.configweb.config 檔案,檔案,就是繼承父目錄就是繼承父目錄 web.configweb.config 檔案的相關設定;檔案的相關設定;如果子目錄擁有如果子目錄擁有 web.configweb.config 檔案,就會覆寫父檔案,就會覆寫父目錄目錄 web.configweb.config 檔案的相關設定。檔案的相關設定。

Page 41: 第 11 章  ASP.NET的Web應用程式

11-7-1 Web11-7-1 Web 組態檔的基礎組態檔的基礎 -- 範例範例<configuration><configuration> <appSettings><appSettings> <add key="dbType" value="Access Database"/><add key="dbType" value="Access Database"/> </appSettings></appSettings> <connectionStrings><connectionStrings> <add name="provider" <add name="provider" connectionString="Microsoft.Jet.OLEDB.4.0;"/>connectionString="Microsoft.Jet.OLEDB.4.0;"/> <add name="database" <add name="database" connectionString="/Ch11/Products.mdb"/>connectionString="/Ch11/Products.mdb"/> </connectionStrings> </connectionStrings> <system.web><system.web> <sessionState cookieless="false" timeout="10"/><sessionState cookieless="false" timeout="10"/> <globalization<globalization fileEncoding="big5"fileEncoding="big5" requestEncoding="big5"requestEncoding="big5" responseEncoding="big5"responseEncoding="big5" culture="zh-TW"/>culture="zh-TW"/> <compilation defaultLanguage="VB" debug="true"/><compilation defaultLanguage="VB" debug="true"/> <customErrors mode="RemoteOnly"/><customErrors mode="RemoteOnly"/> </system.web></system.web></configuration></configuration>

Page 42: 第 11 章  ASP.NET的Web應用程式

11-7-1 Web11-7-1 Web 組態檔的基礎組態檔的基礎 -- 標籤說標籤說明明 11

設定區段 說明<anonymousIdentification> 控制Web應用程式的匿名使用者,詳細的說明請參閱

第 16章<authentication> 設定 ASP.NET驗證方式,請參閱第 13章<authorization> 設定 ASP.NET使用者授權,請參閱第 13章<browserCaps> 設定瀏覽程式相容元件 HttpBrowserCapabilities

<compilation> 設定 ASP.NET應用程式的編譯方式<customErrors> 設定 ASP.NET應用程式的自訂錯誤處理<globalization> 關於 ASP.NET應用程式的全球化設定,也就是本地化

設定<httpHandlers> 設定 HTTP處理是對應到 URL請求的 IHttpHandler類

別<httpModules> 新增、刪除或清除 ASP.NET應用程式的 HTTP模組<httpRuntime> ASP.NET的 HTTP執行期相關設定

<identity> 設定 ASP.NET應用程式的使用者識別是使用伺服端使用者帳號的權限(impersonate屬性),或指定的使用者

帳號(userName和 password屬性)

Page 43: 第 11 章  ASP.NET的Web應用程式

11-7-1 Web11-7-1 Web 組態檔的基礎組態檔的基礎 -- 標籤說標籤說明明 22

設定區段 說明<machineKey> 設定在使用表單基礎驗證的 Cookie資料時,用來加碼

和解碼的金鑰值<membership> 設定 ASP.NET的Membership機制,請參閱第 13章

<pages> 設定 ASP.NET程式的相關設定,即 Page指引指令的屬性

<profile> 設定個人化資訊的 Porfile物件,詳細說明請參閱第 14

章<roles> 設定 ASP.NET的角色管理,詳細說明請參閱第 13章

<sessionState> 設定 ASP.NET應用程式的 Session狀態 HttpModule

<siteMap> 設定 ASP.NET網站導覽,詳細說明請參閱第 12章<trace> ASP.NET應用程式的除錯功能,可以設定是否追蹤應

用程式的執行<webParts> 設定 ASP.NET應用程式的網頁組件,詳細說明請參閱

第 18章<webServices> 設定 ASP.NET的Web服務,詳見第 18章的說明

Page 44: 第 11 章  ASP.NET的Web應用程式

11-7-2 appSettings11-7-2 appSettings與與 connectionStringsconnectionStrings 區區段的參數和連結字串段的參數和連結字串 -web.config-web.config 的內容的內容

在在WebWeb 組態檔的組態檔的 <appSettings><appSettings>區段可以新區段可以新增增 ASP.NETASP.NET 程式所需的參數,可以指定資料庫程式所需的參數,可以指定資料庫連結字串,如下所示:連結字串,如下所示:

<configuration><configuration> <appSettings><appSettings> <add key="dbType" value="Access Database"/><add key="dbType" value="Access Database"/> </appSettings></appSettings> <connectionStrings><connectionStrings> <add name="provider" <add name="provider" connectionString="Microsoft.Jet.OLEDB.4.0;"/>connectionString="Microsoft.Jet.OLEDB.4.0;"/> <add name="database" <add name="database" connectionString="/Ch11/Products.mdb"/>connectionString="/Ch11/Products.mdb"/> </connectionStrings></connectionStrings></configuration></configuration>

Page 45: 第 11 章  ASP.NET的Web應用程式

11-7-2 appSettings11-7-2 appSettings與與 connectionStringsconnectionStrings 區區段的參數和連結字串段的參數和連結字串 -Conifguration API-Conifguration API 的基的基

礎礎 ASP.NET 2.0ASP.NET 2.0版的版的 Configuration APIConfiguration API 可以存取可以存取

web.configweb.config和和machine.configmachine.config 組態檔的設定組態檔的設定資料。在資料。在 ASP.NETASP.NET 程式是使用程式是使用System.Web.ConfigurationSystem.Web.Configuration 名稱空間的名稱空間的WebConfigurationManagerWebConfigurationManager 類別來存取相關設類別來存取相關設定,如下所示:定,如下所示:

Dim dbType As String = _Dim dbType As String = _ WebConfigurationManager.AppSettings("dbType")WebConfigurationManager.AppSettings("dbType")Dim pd, db As StringDim pd, db As Stringpd=WebConfigurationManager.ConnectionStrings( _pd=WebConfigurationManager.ConnectionStrings( _ "provider").ConnectionString"provider").ConnectionStringdb=WebConfigurationManager.ConnectionStrings( _db=WebConfigurationManager.ConnectionStrings( _ "database").ConnectionString"database").ConnectionString

Page 46: 第 11 章  ASP.NET的Web應用程式

11-7-3 11-7-3 在在 sessionStatesessionState 區段設定區段設定SessionSession 狀態狀態

ASP.NETASP.NET的的 SessionSession 狀態管理擁有擴充性,我狀態管理擁有擴充性,我們可以在們可以在 web.configweb.config 檔案的檔案的 <sessionState><sessionState>區段設定區段設定 SessionSession 狀態管理,它屬於狀態管理,它屬於<system.web><system.web> 的子標籤,如下所示:的子標籤,如下所示:

<configuration><configuration> <system.web><system.web> <sessionState cookieless="false" <sessionState cookieless="false" timeout="10"/>timeout="10"/> ……… ……… </system.web></system.web></configuration></configuration>

Page 47: 第 11 章  ASP.NET的Web應用程式

11-7-4 globalization11-7-4 globalization 區段的編碼設區段的編碼設定定

在在 <system.web><system.web>子標籤的子標籤的 <globalization><globalization>區段是本地化相關設定,可以設定區段是本地化相關設定,可以設定 ASP.NETASP.NET 程式程式預設的檔案編碼、請求和回應的編碼方式、日期預設的檔案編碼、請求和回應的編碼方式、日期時間格式和數字等本地化等相關設定,如下所示:時間格式和數字等本地化等相關設定,如下所示:

<configuration><configuration> <system.web><system.web> <globalization<globalization fileEncoding="big5"fileEncoding="big5" requestEncoding="big5"requestEncoding="big5" responseEncoding="big5"responseEncoding="big5" culture="zh-TW"/>culture="zh-TW"/> ……… ……… </system.web></system.web></configuration></configuration>

Page 48: 第 11 章  ASP.NET的Web應用程式

11-7-5 compilation11-7-5 compilation 區段的編譯設定區段的編譯設定 在在 <system.web><system.web>子標籤的子標籤的 <compilation><compilation>區段,可以設定區段,可以設定 ASP.NETASP.NET 程式預設的編譯方式,程式預設的編譯方式,如下所示:如下所示:

<configuration><configuration>

<system.web><system.web>

<compilation defaultLanguage="VB" <compilation defaultLanguage="VB"

debug="true"/>debug="true"/>

……… ………

</system.web></system.web>

</configuration></configuration>

Page 49: 第 11 章  ASP.NET的Web應用程式

11-7-6 customErrors11-7-6 customErrors 區段的自訂錯區段的自訂錯誤網頁誤網頁 -- 說明說明

在在 <system.web><system.web>子標籤子標籤 <customErrors><customErrors>區段,可以設定區段,可以設定 ASP.NETASP.NET 程式的自訂錯誤網頁。程式的自訂錯誤網頁。例如:錯誤代碼例如:錯誤代碼 HTTP 404HTTP 404 ,如下圖所示:,如下圖所示:

Page 50: 第 11 章  ASP.NET的Web應用程式

11-7-6 customErrors11-7-6 customErrors 區段的自訂錯區段的自訂錯誤網頁誤網頁 -- 指定錯誤網頁指定錯誤網頁

在在 <customErrors><customErrors>區段可以指定錯誤網頁,區段可以指定錯誤網頁,如下所示:如下所示:

<configuration><configuration> <system.web><system.web> <customErrors mode="On“<customErrors mode="On“ defaultRedirect="Ch11-7error.htm"/>defaultRedirect="Ch11-7error.htm"/> ……… ……… </system.web></system.web></configuration></configuration>

Page 51: 第 11 章  ASP.NET的Web應用程式

11-7-6 customErrors11-7-6 customErrors 區段的自訂錯區段的自訂錯誤網頁誤網頁 -- 指定錯誤代碼的錯誤網頁指定錯誤代碼的錯誤網頁

在在 customErrorscustomErrors區段擁有多個區段擁有多個 errorerror子標籤,子標籤,每一個每一個 errorerror標籤可以定義標籤可以定義 HTTPHTTP錯誤代碼的自錯誤代碼的自訂錯誤網頁,如下所示:訂錯誤網頁,如下所示:

<configuration><configuration> <system.web><system.web> <customErrors mode="On" <customErrors mode="On" defaultRedirect="Ch11-7error.htm">defaultRedirect="Ch11-7error.htm"> <error statusCode="404"<error statusCode="404" redirect="NotFoundError.htm"/>redirect="NotFoundError.htm"/> </customErrors></customErrors> </system.web></system.web></configuration></configuration>

Page 52: 第 11 章  ASP.NET的Web應用程式

11-8 ASP.NET 2.011-8 ASP.NET 2.0 的網站設定工具的網站設定工具 11-8-1 Web11-8-1 Web 介面的網站管理工具介面的網站管理工具 11-8-2 ASP.NET11-8-2 ASP.NET 設定工具設定工具

Page 53: 第 11 章  ASP.NET的Web應用程式

11-8-1 Web11-8-1 Web 介面的網站管理工介面的網站管理工具具

在在 Visual Web DeveloperVisual Web Developer 提供提供 WebWeb介面的介面的ASP.NETASP.NET 網站管理工具。請啟動網站管理工具。請啟動 VWDVWD 開啟開啟WebWeb 網站,例如:「網站,例如:「 Ch11Ch11 」網站,然後執行」網站,然後執行「網站「網站 /ASP.NET/ASP.NET 組態」指令,可以開啟瀏覽程組態」指令,可以開啟瀏覽程式進入式進入 WebWeb介面管理工具,如下圖所示:介面管理工具,如下圖所示:

Page 54: 第 11 章  ASP.NET的Web應用程式

11-8-2 ASP.NET11-8-2 ASP.NET 設定工具設定工具 如果電腦有安裝如果電腦有安裝 IISIIS ,在安裝,在安裝 .NET Framework 2.0.NET Framework 2.0 版版

後,就會在後,就會在 Internet Information ServicesInternet Information Services 管理工具新管理工具新增增 ASP.NETASP.NET 設定工具。設定工具。

請啟動請啟動 Internet Information ServicesInternet Information Services 管理工具,在網管理工具,在網站虛擬目錄上,執行右鍵快顯功能表的站虛擬目錄上,執行右鍵快顯功能表的【【內容內容】】指令,可指令,可以看到「內容」對話方塊。以看到「內容」對話方塊。

在在【【 ASP.NETASP.NET 】】標籤,按標籤,按【【編輯組態編輯組態】】鈕,可以看到鈕,可以看到ASP.NETASP.NET 組態設定工具,如下圖所示:組態設定工具,如下圖所示: