ASP.NET 2.0網頁設計範例教本

Download Report

Transcript ASP.NET 2.0網頁設計範例教本

第10章 Web應用程式的資料
分享








10-1
10-2
10-3
10-4
10-5
10-6
10-7
10-8
Web應用程式的基礎
設定ASP.NET的Web應用程式
網頁間的資料分享
Application與Session物件
Global.asax檔案的使用
Cookies的處理
Request物件的表單處理
跨程式的Web表單送回
10-1 Web應用程式的基礎


10-1-1 在IIS建立Web應用程式
10-1-2 在VWD測試伺服器建立
Web應用程式
10-1 Web應用程式的基礎


ASP.NET「應用程式」(Applications)
是指使用ASP.NET技術建立的Web應用程
式,它是由網頁相關檔案所組成,可以完
成特定工作的應用程式。
ASP.NET應用程式簡單的說就是一種.NET
Framework應用程式,因為它是在Web伺
服器上執行的應用程式,所以稱為Web應
用程式。
10-1-1 在IIS建立Web應用程式


在IIS的Web伺服器能夠將整個網站,或指定網
站目錄建立成Web應用程式。並且能夠在同一個
網站建立多個Web應用程式,每一個虛擬目錄都
可以建立成為Web應用程式。
在IIS建立Web應用程式的方法,如下所示:
• 在IIS新增網站:主目錄預設是一個Web應用程式。
• 網站虛擬目錄(Virtual Directories):當目錄新增
成為虛擬目錄或Web共用時,如果目錄擁有【指令碼】
權限,它就是一個Web應用程式,詳細步驟請參閱第
1-5-3節。
• 主目錄下實際路徑的子目錄:預設與上一層主目錄屬
於同一個Web應用程式。
10-1-2 在VWD測試伺服器建立Web
應用程式-1


VWD內建測試ASP.NET程式執行的程式開發伺服
器,事實上,它就是1.0/1.1版名為Cassini的個
人Web伺服器,這是支援ASP.NET技術的Web伺
服器,可以在非IIS環境測試執行ASP.NET應用
程式。
當VWD開啟「Ch10」資料夾網站和執行
ASP.NET程式Default.aspx時,就會在工作列建
立程式開發伺服器圖示,如下圖所示:
10-1-2 在VWD測試伺服器建立Web
應用程式-2

在程式開發伺服器的圖示,執行右鍵【顯示詳細
資訊】指令,可以看到伺服器的詳細資訊,一個
VWD的程式開發伺服器只能建立一個Web應用程
式,以此例它是在埠號1059建立Web應用程式。
10-2 設定ASP.NET的Web應用程式


10-2-1 Web.Config組態檔
10-2-2 Web介面的網站管理工具
10-2-1 Web.Config組態檔-說明


Web組態檔是ASP.NET技術Web應用程式
的資源設定檔案,它是一份XML文件,內
含Web應用程式相關設定的XML標籤,可
以用來簡化ASP.NET應用程式的設定。
雖然我們可以自行編輯位在Web應用程式
根目錄的Web.Config組態檔內容,不過,
另一種簡單方式是直接使用下一節的Web
介面網站管理工具,使用它來更改
Web.Config檔案的相關設定。
10-2-1 Web.Config組態檔-範例
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings/>
<connectionStrings>
<add name="iPodsConnectionString"
connectionString="Provider=…"
providerName="System.Data.OleDb" />
</connectionStrings>
<system.web>
<compilation debug="false" />
<authentication mode="Windows" />
<customErrors mode="RemoteOnly"
defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
</system.web>
</configuration>
10-2-2 Web介面的網站管理工具-啟
動

在Visual Web Developer提供Web介面的
ASP.NET網站管理工具,請啟動VWD開啟
「Ch10」網站後,執行「網站」→「ASP.NET
組態」指令,可以開啟瀏覽程式進入Web介面管
理工具,如下圖所示:
10-2-2 Web介面的網站管理工具-安
全性標籤

在此標籤可以建立Web應用程式的安全設
定,包含驗證方式、建立和管理使用者、
角色和存取規則,詳細說明請參閱第17章。
10-2-2 Web介面的網站管理工具-應
用程式標籤

在此標籤可以更改Web應用程式設定、設
定SMTP伺服器、更改應用程式狀態和除錯
與追蹤模式,如下圖所示:
10-2-2 Web介面的網站管理工具-提
供者標籤

在此標籤可以設定資料來源提供者(Data
Provider),預設使用
AspNetSqlProvider提供者。
10-3 網頁間的資料分享


10-3-1 在網頁間分享資料
10-3-2 網頁間資料分享的方法
10-3-1 在網頁間分享資料-說明


當使用者進入網站,因為HTTP通訊協定並
不會保留客戶端的使用者狀態,在伺服端
根本不知道瀏覽端有哪些使用者正在瀏覽
和其使用狀態。
例如:在移至其他ASP.NET程式時,使用
者資料並不會自動傳給下一頁,除非瀏覽
每一頁時都讓使用者在Web表單重新輸入
一次。
10-3-1 在網頁間分享資料-種類


分享給網站所有的使用者:在ASP.NET程
式就是使用Application變數進行分享,例
如:目前線上的使用者計數。
針對每位使用者的專屬資料:在ASP.NET
程式就是Session變數的分享資料,例如:
登入使用者的個人資料。
10-3-2 網頁間資料分享的方法

ASP.NET的資料分享方法,如下所示:
• Application和Session物件。
• ASP.NET 2.0版的Profile物件,請參閱第17
章。
• 使用Cookies保留在客戶端電腦。
• 將Web表單處理程式指定成其他ASP.NET程式,
就可以將欄位資料傳遞到其他ASP.NET程式,
即跨ASP.NET程式的表單送回。
• Request物件配合表單或網址URL參數,將欄
位資料和參數傳到其他ASP.NET程式,即ASP
3.0版的表單處理。
10-4 Application與Session物件



10-4-1 Application與Session物件的基礎
10-4-2 Application變數的使用
10-4-3 Session變數的使用
10-4-1 Application與Session物件的
基礎-說明

在ASP.NET的Web應用程式擁有一個
Application物件,針對每一位使用者擁有
對應的Session物件,如下圖所示:
10-4-1 Application與Session物件的
基礎-Application物件


Application物件的主要目的是建立
Application變數的集合物件,可以提供進
入Web應用程式的每位使用者一個資料分
享的管道。它允許客戶端的每位使用者存
取Application變數。以此例使用者1和2都
可以存取Application變數。
Application物件存在期間是在第1個
Session物件建立後產生,直到Web伺服
器關機且所有的使用者都離線後Web應用
程式結束後才會關閉。
10-4-1 Application與Session物件的
基礎-Session物件


ASP.NET的【Session期間】是指Web應用程式
從一頁ASP.NET網頁移到其他ASP.NET網頁過程
中所花費的時間。ASP.NET技術提供相關類別來
管理Session期間的資訊,也就是建立Session
物件來保留Session期間的資料。
當一位尚未建立Session物件的使用者執行Web
應用程式的ASP.NET程式時,伺服器就會自動建
立一個對應的Session物件,而且指定唯一的
Session ID編號。例如:上述圖例的每一位使用
者都擁有專屬ID的Session物件,只允許對應使
用者存取Session變數,在同一個Web應用程式
的其他使用者並不能存取。
10-4-2 Application變數的使用-1

不論網站的Web應用程式有多少位使用者進入,
對於每一個Application變數,伺服端都只會在記
憶體保留一份資料,變數的基本格式如下:
Application("Page_Counter") = 0

上述變數名稱和ASP.NET程式變數不太一樣,這
是一個字串"Page_Counter",加上
Application()來取得集合物件的指定元素,它可
以將Application變數Page_Counter設為零。
10-4-2 Application變數的使用-2

為了避免資料存取衝突的情況,因為2位使用者同
時讀取Application變數並沒有關係,如果一位更
改,一位讀取Application變數,在這種情況下衝
突就會發生,為了避免這種情況,Application的
方法可以保障在同一時間內只允許一位使用者存
取Application變數,如下所示:
Application.Lock()
Application("Page_Counter") = _
Application("Page_Counter")+1
Application.Unlock()
10-4-3 Session變數的使用-說明

Session變數是附屬在進入Web應用程式
使用者的Session期間,每一位使用者擁有
一組專屬Session變數,雖然每位使用者的
Session變數名稱相同,但是內容可能完全
不同,而且只有該使用者執行的ASP.NET
程式才能夠存取自己專屬的Session變數。
10-4-3 Session變數的使用-方法與
屬性
方法
Abandon()
Remove()
屬性
TimeOut
SessionID
IsNewSession
說明
使用者建立的 Session 變數都會被清除掉,也就是說再也不
能存取 Session 變數值
刪除指定的 Session 變數,參數是 Session 變數的名稱字串
說明
設定每一個 Session 期間的持續時間,以分鐘計,如果超過
時間,Session 變數將自動刪除
取得使用者唯一的 Session 編號,此為唯讀屬性
是否是新的 Session 期間
10-4-3 Session變數的使用-傳遞資
料
Session變數可以在網頁間分享資料,換句話說,
我們可以使用Session變數將Web表單輸入資料
傳遞給其他ASP.NET程式,如下所示:
Session("UserName") = name.Text
Session("UserPassword") = pass.Text
 只要使用者沒有超過Session期間或執行
Abandon()方法,在期間內執行其他ASP.NET程
式,都可以存取上述Session變數值,如下所示:
name = Session("UserName")
password = Session("UserPassword")

10-5 Global.asax檔案的使用



10-5-1 在VWD新增Global.asax檔案
10-5-2 Global.asax檔案的架構
10-5-3 Global.asax檔案的使用
10-5 Global.asax檔案的使用


Global.asax是選擇性檔案,在ASP.NET
的Web應用程式並不一定需要此檔案,除
非Web應用程式需要使用到Application和
Session物件的事件,因為這些事件處理程
序是位在Global.asax檔案。
在ASP.NET的Web應用程式新增
Global.asax檔案時,請注意!一個Web
應用程式只能擁有唯一的Global.asax檔案,
其位置是Web應用程式的根目錄。
10-5-1 在VWD新增Global.asax檔案

ASP.NET的Global.asax檔案是ANSI文字
檔案,使用Windows記事本或VWD都可以
編輯Global.asax檔案的內容。在Visual
Web Developer新增Global.asax檔案的
步驟,如下所示:
• 1. 請啟動VWD開啟「Ch10」網站後,執行
「檔案」→「新增」→「檔案」指令,可以看
到「加入新項目」對話方塊。
• 2. 選【全球應用程式類別】(如果網站已經新
增,就不會看到此項目),按【加入】鈕就可
以在網站新增Global.asax檔案。
10-5-2 Global.asax檔案的架構-架構
<%@ Application Language="VB" %>
<script Runat="server">
Sub Application_Start(ByVal Sender As Object, _
ByVal E As EventArgs)
End Sub
Sub Application_End(ByVal Sender As Object, _
ByVal E As EventArgs)
End Sub
Sub Application_Error(ByVal Sender As Object, _
ByVal E As EventArgs)
End Sub
Sub Session_Start(ByVal sender As Object, _
ByVal e As EventArgs)
End Sub
Sub Session_End(ByVal sender As Object, _
ByVal e As EventArgs)
End Sub
</script>
10-5-2 Global.asax檔案的架構-說明
事件處理程序
說明
Application_Start() 當第 1 位使用者進入 ASP.NET 程式時,Application 物件
的 Start 事件就觸發,在觸發後,就算有成千上萬位使用
者進入網站都不會重新觸發,除非 Web 伺服器關機。通
常是用來初始 Application 變數,例如:初始訪客計數
Application_End() 當 Web 伺服器關機,Application 物件的 End 事件就會觸
發
Application_Error() 產生未能處理錯誤時,觸發 Application 物件的 Error 事件
Session_Start() 當使用者建立 Session 期間時,就觸發 Session 物件的 Start
事件,如果有 50 位使用者,就觸發 50 次事件,每個事件
是獨立觸發,不會互相影響,通常是用來初始使用者專屬
的 Session 變數
Session_End()
使用者在預設時間內沒有進入其他 ASP.NET 程式,就會
觸發 Session 物件的 End 事件,時間是由 TimeOut 屬性設
定,通常是善後用途的程式碼,例如:將 Session 變數存
入資料庫或文字檔案
10-5-3 Global.asax檔案的使用-1


當使用者請求ASP.NET程式後,就會替每位使用
者建立Session期間,接著檢查ASP.NET應用程
式是否擁有Global.asax檔案。
如果有Global.asax檔案,在執行ASP.NET檔案
的程式碼前,如果是第1位使用者,就觸發
Application物件的Start事件,執行
Global.asax檔案的Application_Start()事件處
理程序,接著建立Session物件,因為
Global.asax檔案存在,接著執行
Session_Start()事件處理程序。
10-5-3 Global.asax檔案的使用-2


當Session期間超過TimeOut屬性的設定(預設
20分鐘)或執行Abandon()方法,表示Session
期間結束,就觸發Session物件的End事件執行
Session_End()事件處理程式,處理程序是在關
閉Session物件前執行。
Web伺服器如果關機,在關閉Application物件
前就會執行Application_End()事件處理程序,
當然也會結束所有使用者的Session期間,和執
行所有使用者的Session_End()事件處理程序。
10-6 Cookies的處理





10-6-1
10-6-2
10-6-3
10-6-4
10-6-5
Cookies的基礎
新增Cookie
取得Cookie的值
刪除Cookie
多鍵Cookie的使用
10-6-1 Cookies的基礎-說明


Cookies的英文意義是小餅乾,源於這些儲
存在客戶端電腦的檔案尺寸都很小,
Cookies儲存在瀏覽程式所在的電腦,所以
並不會浪費Web伺服器的資源。
在ASP.NET程式只需檢查客戶端是否有儲
存Cookie,在取得Cookie的保留資訊後,
就可以輕鬆建立複雜的Web應用程式。
10-6-1 Cookies的基礎-用途

Cookies在網站實作上的應用相當多,使用
Cookies保留的資料大都屬於幾個方面,如
下所示:
• 個人資訊:使用Cookies保留個人資訊,例如:
使用者名稱、時區、帳號和造訪網站的次數等。
• 個人化資訊:Cookies可以定製個人化的網站
外觀和個人偏好的網站內容,或是記錄使用者
有興趣的資訊。
• 網站購物車:線上購物車需要保留使用者選擇
的商品清單,Cookies就可以用來記錄這些選
購商品。
10-6-2 新增Cookie

Cookie是一種集合物件,可以使用名稱存取
Cookie值,新增Cookie是使用Response物件的
Cookies屬性來新增Cookie,其程式碼如下所示:
Dim name As String = "江小魚"
Response.Cookies("UserName").Value = name

在新增Cookie後還需要設定Cookie的Expires屬
性,即Cookie檔案存在客戶端電腦的期限,如下
所示:
Dim dtDay As Date = DateAdd("D", 10, Today)
Response.Cookies("UserName").Expires = dtDay
10-6-3 取得Cookie的值

在客戶端電腦如果擁有Cookie,ASP.NET
程式可以使用Request物件的Cookies集合
物件來取得指定的Cookie值,如下所示:
name = Request.Cookies("UserName").Value

上述程式碼可以取得Cookie名稱
UserName的值,並且將它指定給變數
name。
10-6-4 刪除Cookie

客戶端的Cookie如果不再需要,在
ASP.NET程式可以刪除Cookie,刪除方式
是將Expires屬性設定成過期的時間,如下
所示:
Dim dtDay As Date = DateAdd("D", -365, Today)
Response.Cookies("UserName").Expires = dtDay

上述程式碼將有效期限設為一年前,因為
Cookie已經過期,換句話說,就是刪除
Cookie。
10-6-5 多鍵Cookie的使用-說明

Cookie是一種目錄結構的集合物件,在同
名Cookie下可以擁有不同Key的鍵名。換
句話說,同一個Cookie名稱就可以儲存多
種資料。
10-6-5 多鍵Cookie的使用-新增多鍵
的Cookie

在ASP.NET程式新增多鍵Cookie,需要在
名稱後再加上鍵名,如下所示:
Response.Cookies("User")("UserName") = "陳會安"
Response.Cookies("User")("Password") = "1234"
Response.Cookies("User").Expires = _
DateAdd("D",10,Today)
10-6-5 多鍵Cookie的使用-取得多鍵
的Cookie值

多鍵Cookie如同陣列,取得Cookie值時不
只需要指定名稱,還需要指定鍵名,如下
所示:
name = _
Request.Cookies("User")("UserName")
pass = Request.Cookies("User")("Password")
10-6-5 多鍵Cookie的使用-刪除多鍵
的Cookie

多鍵Cookie的刪除和第10-6-4節相同,只
需將Cookie的Expires屬性設為過期後,
就可以刪除Cookie。如果只刪除Cookie其
中一個鍵名,請將該鍵名設成空字串即可,
如下所示:
Response.Cookies("User")("Password") = ""

上述程式碼刪除Cookie名稱為User的
Password鍵名。
10-7 Request物件的表單處理


10-7-1 Form與QueryString集合物件
10-7-2 Request物件的表單處理
10-7-1 Form與QueryString集合物
件-ASP 3.0版的表單處理

ASP 3.0版的表單處理就是使用Request物件的
Form與QueryString集合物件來取得輸入資料,
如下所示:
• 傳統HTML/XHTML表單網頁:使用表單欄位以HTTP
通訊協定的檔頭傳遞表單欄位資料,可以使用POST或
GET方法,如下所示:
<form name="name" method="POST | GET"
action="URL">
……….
</form>
• URL參數:從瀏覽程式輸入的網址傳遞參數,其總長
度只有1024個字元。
10-7-1 Form與QueryString集合物
件-Form集合物件

網頁表單如果使用POST方法傳遞資料,它
是將傳遞資料在編碼後,透過HTTP通訊協
定的標頭資料傳送到Web伺服器,在伺服
端可以使用Form集合物件來取出資料,其
語法如下所示:
Request(("FieldName")
Request.Form("FieldName")
10-7-1 Form與QueryString集合物
件-QueryString集合物件
網頁表單如果使用GET方法傳遞資料,就是將傳
遞資料編碼後,透過URL網址後的字串傳送到
Web伺服器,參數是位在問號之後,如果參數不
只一個,請使用「&」符號分隔,如下所示:
http://localhost/Ch10-72.aspx?fname1=value1&fname2=value2
 當瀏覽程式輸入上述網址,按下Enter鍵後,伺
服端就可以使用QueryString集合物件來取出資
料,如下所示:
Request(("FieldName")
Request.QueryString(" FieldName")

10-7-2 Request物件的表單處理


Request物件的表單處理除了可以使用使用表單
方式來傳遞資料外,還可以使用超連結URL參數
來傳送資料給其他ASP.NET程式。
URL超連結傳遞的參數或表單GET方法傳遞的內
容,都是使用QueryString集合物件,POST方
法是使用Form集合物件來取得URL參數或欄位值,
如下所示:
name = Request("Username")
pass = Request("Password")

程式碼沒有指定QueryString或Form集合物件,
換句話說,它可以取得URL參數和表單POST方
法傳遞的參數,右邊括號內是參數或欄位名稱字
串。
10-8 跨程式的Web表單送回-說明

ASP.NET 2.0版可以使用PreviousPage物
件執行跨ASP.NET程式的Web表單送回。
換句話說,我們可以將Web表單處理程式
指定成其他ASP.NET程式(預設是自己),
也就是將欄位資料傳遞給其他ASP.NET程
式。
10-8 跨程式的Web表單送回-指定
Web表單處理程式


ASP.NET 2.0版可以使用PreviousPage物件執
行跨ASP.NET程式的Web表單送回。換句話說,
我們可以將Web表單處理程式指定成其他
ASP.NET程式(預設是自己),也就是將欄位資
料傳遞給其他ASP.NET程式。
在Web表單的Button控制項可以使用
PostBackUrl屬性來指定表單送回的ASP.NET程
式,如下所示:
<asp:Button Id="Button" Text="下一步"
Runat="server"
PostBackUrl="Ch10-8Second.aspx"/>

上述Button控制項指定表單送回至ASP.NET程式
Ch10-8Second.aspx。
10-8 跨程式的Web表單送回-取得跨
程式Web表單的控制項

ASP.NET程式的Page_Load()事件處理程序,可
以使用FindControl()方法取得前一頁ASP.NET
程式的控制項,如下所示:
Dim txt As TextBox
txt = PreviousPage.FindControl("user")
name.Text = txt.Text
txt = PreviousPage.FindControl("pass")
pass.Text = txt.Text

上述程式碼使用PreviousPage屬性取得前一頁的
Page物件後,使用FindControl()方法找尋指定
名稱的控制項,以此例是名為user和pass的2個
TextBox控制項,然後取得Text屬性的控制項值。