這些狀態的原理對於做.NET開發非常重要。現在詳細解說一下。
視圖狀態:視圖狀態就在大家身邊不知道大家是否注意。ASP.NET是基於服務其處理事件 的。當服務器處理完事件時,再返回本窗體時,如果沒有視圖狀態,原來的數據將不會在有 。這樣說也許會暈。舉個列子,比如有一個網站需要你注冊成為會員。當你填完信息,(一 般來說頁面會轉向別的地方)這裡為了說明問題,我們讓他返回原來的頁面繼續操作,如果 沒有視圖狀態,則你以前填的數據都沒有了。如果有視圖狀態,則原來的數據還在。試圖狀 態在一些時候很有用。比如說分級驗證時。
那麼.NET是用什麼方法保持試圖狀態呢?這裡微軟采用了一種特殊的方法。在浏覽器打開 網頁的源代碼,你會發現一段你在編輯網頁時,沒有添加的一個HTML控件。
形式是這樣的:
<input type="hidden" name="_VIEWSTATE" id="_VIEWSTATE" value="一 些加密過的值"/>
這是.NET自動給你添加的。它也是視圖狀態能夠實現的功臣。因為這個空間是隱藏的,所 以不會破壞頁面的布局。空件中的value中的值就是就是各個空件以及控件中的數據(狀態) 。這些數據是經過哈希函數加密過的。這是為了安全考慮。當網頁提交時,浏覽器首先將當 前網頁中的各種狀態(包括控件以及控件中的數據)保存到這個HTML字段中。當網頁再次返 回浏覽器時,在自動把這些狀態返回給網頁,這樣網頁也就恢復了狀態。
再來講講視圖狀態需要注意的問題。
視圖狀態只能在本網頁與服務器之間保持,不能在不同網頁之間連接時保持。默認情況下 ,幾乎所有的ASP.NET控件都有保持視圖狀態的功能。
視圖狀態有很多優點,但同樣(世上每件事都具有兩面性,一個好的技術也不列外)有些 缺點。首先是安全,雖然數據是經過加密,但對於黑客中的骨灰級人物,還是很不安全的。 再次,你可以想如果你的頁面包括幾百條記錄,頁面很復雜,這是必會影響網頁的加載速度 。
應用程序狀態(Application):Application對象是應用程序的全局性對象。用於存放應 用程序的全局共享資源。他的本質是HttpApplicationState類的一個實例。當用戶第一次反 問某虛目錄中的資源時,就被創建。也就是說網站第一次在互聯網上發布,這時有一個用戶 剛好訪問你的虛擬目錄資源,那麼Application對象就已經建立。在資源與應用程序之間建立 了一個緩沖區。
應用程序狀態只有在網站運行時存在。當應用程序推出或服務器關閉時(更慘一點服務器 崩潰了),應用程序狀態中保存的數據機會丟失和損壞。所以對於需要永久保留的資源還是 在數據庫中持久化保存的好。
介紹一些Application對象的一些操作方法。
Application對象當然是采用最經典的“鍵-值”對的字典方法來定義。其中鍵為字符串代 表Application對象的名稱。值可以是任何類型的數據。(例如HTML,CSS,SQL都可以)。舉個 例子:
Application["source"]="special source";
string message =Application["source"].ToString();
在Application中添加刪除保存的對象。
Application.Add("source",''special source");
Application.remove("source");
來一個狠一點的操作,把Application中的對象全部請出去。
Application.Clear();
或Appication.RemoveAll();
信息共享自然會引來一個問題,資源的同步競爭。這類問題解決當然要靠鎖了。
Applicatin.Lock()//加鎖鎖定資源,不讓其他進程訪問。
functions(Application["source"]);//一些操作Application對象的操作。
Application.UnLock();//解除鎖定。