close
主題:靈活運用 ASP.NET 內建 ViewState 功能改善網站執行效率
作者: Eric Huang 什麼是ViewState
簡單的說 ViewState 的功能就是保存網頁上所有的資料,好處是當PostBack發生時,資料不會不見(包含Dropdownlist,checkbox ... 都會保持在你選的那一個)
例如說你在textbox中打了你的名子,PostBack後你的名子還是會出現在textbox中.

最常見到的ViewState運用就是用在Datagrid中,它讓分頁變的很簡單.因為所有的資料已經輸出並保存在Client Side. 不用每換一頁就讀取一次資料庫,節省了系統的資源.

ViewState的好處與缺點
好處:不會佔用系統資源 (記憶體)
缺點:網頁會變大 (多了一串ViewState,會花比較久的時間Load)

ViewState支援的Type
strings, integers, Booleans, arrays, ArrayList, hashtable 和 custom TypeConverters

ViewState注意事項
以下是使用ViewState該注意的地方
1.ViewState 只會保留 <form runat="server"> </form>中的資料
2.ViewState 的預設值是開啟的
3.ViewState 會增加網頁的size (他儲存了網頁上所有的資料,所以如果你有一個很大的datagrid,那網頁可能會超過100k..)
4.你可以用 Trace 來找出網頁的size和ViewState的大小
< %@ Page Language="vb" Debug="true" Trace="true"%>
5.ViewState 可以關掉
< asp:datagrid EnbleViewState="false" ...%> 關掉這個datagrid 的 ViewState
or <%@ Page EnableViewState="false" ...%> 關掉整個網頁的ViewState
or 在web.config中 <Pages EnableViewState="false" ../> 關掉整個網站的ViewState
6.如果你的網頁不需要用到PostBack, 那你可以用 <form></form>取代<form runat="server">這樣就不會產生ViewState了

ViewState使用時機
因為他是預設開的,所以在這裡你就要決定何時"不使用" (縮小網頁size,加快網頁的開啟)
1.如果你的網頁不需要PostBack的話 - 關掉
2.如果你不需要用到 web control event 的話 - 關掉
3.像是Detail page這種沒有互動的網頁,也可以關掉
沒有互動的網頁:例如 Datagrid & Datalist 沒有分頁,編輯,刪除 和 DataRepeater, 只顯示資料的網頁等等

安全性
ViewState 看起來好像是加密的,其實不是.下面看到的亂碼是 base64-encoded ,目的是確保資料傳輸時不會被改掉.所以ViewState Code是可以被駭客還原的

<input type="hidden" name="__VIEWSTATE"
value="dDwxNTgMjE3ATl4Jx621Qn7dDw7bDxpPDE

那要如何加密呢?
首先先將 EnableViewState= 改成 EnableViewStateMAC= 如下
< %@Page EnableViewStateMAC="true" %>
再來在 web.config 或 Machine.config 中加入
< machineKey validation="3DES" />
這樣就可以了. ASP.NET 就會根據你的machineKey去產生hash code 這樣駭客就無法還原了

總結
ViewState是一個很方便的工具,它可以保存網頁上的資料.運用的好,可以節省你很多時間去寫Code.運用的不好會,會影響網頁執行的效率.所以當你的網站建立好時,花點時間去檢查和調整ViewState. 這樣可以讓你的網站變的更快更有效率.

本文轉自http://blog.csdn.net/peak915/archive/2006/03/06/616868.aspx
arrow
arrow
    全站熱搜

    阿彥仔 發表在 痞客邦 留言(0) 人氣()