ASP.NET事件小探討
來源:互聯網
上載者:User
asp.net 今天早上做了ASP.NET頁面計數器的實驗,用的是簡單的文字檔來儲存計數器的數值(
實際是以Byte類型值進行的儲存),原理代碼可見我以前發的《簡單計數器實現程式》。
今天的任務是把原來WinForm中的檔案讀寫放入到ASP.NET的BehindCode中,這就會出現
些許問題。
問題一:檔案路徑
在ASP.NET的BehindCode中寫檔案路徑就不能因為檔案在這個應用程式的目錄下直接寫文
件名來調用了。
例:
以前使用WinForm編程的時候,如果文字檔Count.txt跟程式的可執行檔在一個目錄
下可直接使用FileStream fs=File.Open("Count.txt",FileMode.Open);來對檔案進行讀
取。
而在ASP.NET中,Web應用程式的路徑是"虛路徑",意思是沒有映射為系統當前應用程式
預設路徑(系統當前預設路徑應該為C:\windows\system32,原因是此路徑下面有Web應用
程式可供調用的豐富的Win32API)。那麼虛擬路徑的根是儲存在什麼地方呢?應該是在I
IS的設定檔中,在C#中這個路徑就是通過Server.MapPath()函數來映射的。
例:
如果Count.txt檔案在此Web應用程式的目錄下,可以通過Server.MapPath("../Count.tx
t");來映射到這個檔案。註:直接寫檔案名稱會找不到此檔案,顯示的是檔案無法讀取的
資訊。
問題二:
Web應用程式事件問題
其實ASP.NET的通訊及訪問模型中有三個層次
第一個層次就是Application,是Web應用程式層
此層次的變數周期為整個Application,不過在Application_Start和Application_End兩
個事件中啟動並執行代碼,只有在應用程式開始或結束的時候才能進行(伺服器啟動/關閉或
者強制IIS把此應用程式啟動/關閉的時候),因此在這兩個事件中寫計數器代碼是無用
的。
第二個層次是Session,是Web應用程式的一個通訊層
一次與使用者的通訊(從以一個IP訪問應用程式開始,到這個IP與應用程式斷開或逾時斷
開)對計數器來說是最有價值的體現,也是一個頁面計數器的功能。
不過問題也隨之出現了:
Session的Session_Start和Session_End事件是在一次通訊的開始和結束才被激發的。這
樣如果在Session_Start實件中寫代碼的話,只有一次通訊開始時訪問的頁面上才有計數
器的顯示,而在重新整理後頁面顯示計數器的部分就不會再顯示了,怎麼辦?不用著急請繼
續往下看。
第三個層次是Page層,是每個頁面即Web Document的控制對象層。
我們知道了一個Web頁面有一個Page層,我們就會瞭解,一個頁面調出的時候將會調用Pa
在此事件中添加計數器計數的代碼,計數器就會因為頁面重新整理一次而增加一,這是我們
不願意看到的。
怎麼辦?
很簡單,在Session_Start中寫計數器計數的代碼,在Page_Load中寫計數器顯示的代碼
,這樣就可以實現我們需要的功能了。
希望通過這篇文章,能夠協助初學者理解這幾個Web應用程式層次及對應的事件,有時可
能有對問題的錯誤見解,希望能有高手指教。