ASP.NET中控制項的EnableViewState屬性及徹底禁用_實用技巧

來源:互聯網
上載者:User

  在ASP.Net中對各個WebForm控制項引入以前沒有的EnableViewState屬性。這個屬性究竟有什麼用。我們知道對於WebForm而言,其代碼是在伺服器端的,以處理用戶端的請求。當使用者通過瀏覽器瀏覽網頁的時候,會對網頁進行某些操作,比如開啟新連結,或單擊某個按鈕。在ASP中,這些是通過指令碼語言對其進行處理,之後再傳遞給伺服器端。但是在ASP.NET下,由於採用了code behind技術,在coding的時候,通常是將以前用戶端完成的工作放到了伺服器端。

  那麼,伺服器是怎麼知道客戶的操作的呢?比如我在文字框輸入的內容,或者單擊了登入按鈕,伺服器端是怎樣得到這些資訊的呢?因為沒有這些資訊,伺服器端就無法響應客戶的請求。原理就是ASP.NET引用了viewstate的機制。在伺服器端儲存了網頁各個控制項及頁面的狀態,這其中包括各個控制項在頁面上的布局,和他們各自的屬性。這些值就儲存在ViewState下。我們可以觀察Aspx頁面的html原始碼,假設這個頁面上有一個button按鈕,和一個listBox控制項,html檔案如下:

複製代碼 代碼如下:
<input type="hidden" name="__VIEWSTATE" value="dDwzODYzNDM5NTU7Oz7FvviJbq45bDa7QJaumIiOhZ8mOQ==" />
<input type="submit" name="Button1" value="Button" id="Button1" style="height:40px;width:96px;Z-INDEX: 101; LEFT: 200px; POSITION: absolute; TOP: 240px" />
<select name="ListBox1" size="4" id="ListBox1" style="width:152px;Z-INDEX: 102; LEFT: 176px; POSITION: absolute; TOP: 120px"></select>

  我們它的不同之處,一是少了以前所必須響應用戶端事件的指令碼語言,一是多了一個名為”_VIEWSTATE”的屬性。其值是一長串字元。類型為“hidden”。這個值記錄的就是各個控制項和頁面的狀態資訊。當使用者對頁面進行相關操作的時候,狀態值發生改變,並將改變的值傳遞給伺服器端。伺服器端在比較改變後的狀態值和初始值之間的區別,以響應具體的請求。

  一旦頁面的控制項很多,這種頻繁的傳遞控制項狀態值對網路的消耗是很大的,因此,ASP.Net提供了EnableViewState屬性,系統預設的值為true。當設定為true時,在傳遞狀態值時就包括該控制項;如果設定為false,則傳遞狀態值時則不包括它。既然狀態值不包括該控制項,則用戶端對它進行的操作,伺服器端是不響應的。

我們可以做個實驗,在Button1_Click事件中,編寫代碼:

複製代碼 代碼如下:
ListBox.Items.Add("用戶端點擊按鈕一次!");

  此時運行該應用程式,單擊網頁上的按鈕,在ListBox中會新增內容,不斷地單擊,內容則不斷添加。如果我們將ListBox的EnableViewState屬性改為false時,不斷單擊按鈕,則只能添加一次。

  這樣有什麼好處呢?如果我們在開發Web應用程式時,某些控制項是不需要接受使用者的操作或只需要接受一次操作的時候,我們可以將這些控制項的EnableViewState屬性改為false,這樣可以最佳化我們的程式,提高網路訪問的速度。

擴充:關於如何徹底禁用 EnableViewState

網上有人說“去Web.config中將enableViewState從全域關閉”。再開啟一個空頁面看看,是不是清爽了很多。啊?頁面原始碼中,仍然出現了:

複製代碼 代碼如下:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZI7OBu+sMrYke3ELlQKIiNbArzXe" />

個人理解,ASP.NET中的控制項為了維持它們的狀態,就必須要用到VIEWSTATE。不過有個方法,可以徹底去掉VIEWSTATE,如下:

1.首先是ASP.NET4.0 其他版本未測試,有興趣的可以測試一下其他版本。

2.前台頁面顯示資料只用Repeater和Literal控制項。

3.使用HTML控制項,不使用標準控制項,基於表單的形式提交資料,而非ASP.NET中預設的事件模式。

以上就是本文的全部內容,希望能給大家一個參考,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.