2013年1月20日 星期日
ViewState的運用
Author: Mango
|
at:凌晨1:47
|
Category :
ASP.C#
|
form http://yan3776.pixnet.net/blog/post/11094909-viewstate%E7%9A%84%E9%81%8B%E7%94%A8
主題:靈活運用 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. 這樣可以讓你的網站變的更快更有效率.
訂閱:
張貼留言 (Atom)
0 意見:
張貼留言