ASP.NET 允許您將資訊儲存在 HiddenField 控制項中,此控制項將呈現為一個標準的 HTML 隱藏欄位。
隱藏欄位在瀏覽器中不以可見的形式呈現,但您可以就像對待標準控制項一樣設定其屬性。
當向伺服器提交頁時,隱藏欄位的內容將在 HTTP 表單集合中隨同其他控制項的值一起發送。
隱藏欄位可用作一個儲存庫,您可以將希望直接儲存在頁中的任何特定於頁的資訊放置到其中。
安全注意
惡意使用者可以很容易地查看和修改隱藏欄位的內容。請不要在隱藏欄位中儲存任何敏感資訊或保障應用程式正確啟動並執行資訊。
HiddenField 控制項在其Value屬性中只儲存一個變數,並且必須通過顯式方式添加到頁上。
為了在頁處理期間能夠使用隱藏欄位的值,必須使用 HTTP POST 命令提交相應的頁。如果在您使用隱藏欄位的同時,為了響應某個連結或 HTTP GET 命令而對頁進行了相應處理,那麼隱藏欄位將不可用。
HiddenField 控制項用於儲存一個值,在向伺服器的各次發送過程中,需保持該值。它呈現為 <input type= "hidden"/> 元素。
通常情況下,Web Form頁的狀態由檢視狀態、工作階段狀態和 cookie 來維持。但是,如果這些方法被禁用或不可用,則可以使用 HiddenField 控制項來儲存狀態值。
若要指定 HiddenField 控制項的值,請使用 Value 屬性。
在向伺服器的各次發送過程中,當 HiddenField 控制項的值更改時,將引發ValueChanged事件
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>無標題頁</title>
<script type="text/javascript">
function PageLoad()
{
// Set the value of the HiddenField control with the
// value from the TextBox.
form1.ValueHiddenField.value = form1.ValueTextBox.value;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="ValueTextBox" runat="server" />
<br />
<input type="submit" name="SubmitButton" value="Submit" onclick="PageLoad()" />
<br />
<asp:Label ID="Message" runat="server" />
<asp:HiddenField ID="ValueHiddenField" runat="server" OnValueChanged="ValueHiddenField_ValueChanged" />
</div>
</form>
</body>
</html>
總結
可以在頁上的隱藏欄位中儲存特定於頁的資訊,作為維護頁的狀態的一種方式。
如果使用隱藏欄位,最好在用戶端上只儲存少量經常更改的資料。
注意:
如果使用隱藏欄位,則必須使用 HTTP POST 方法向伺服器提交頁,而不是使用通過頁 URL 請求該頁的方法(HTTP GET 方法)向伺服器提交頁。
使用隱藏欄位的優點
1.不需要任何伺服器資源:隱藏欄位在頁上儲存和讀取。
2.廣泛的支援:幾乎所有瀏覽器和用戶端裝置都支援具有隱藏欄位的表單。
3.實現簡單:隱藏欄位是標準的HTML控制項,不需要複雜的編程邏輯。
使用隱藏欄位的缺點
1.潛在的安全風險
隱藏欄位可以被篡改。如果直接查看頁輸出源,可以看到隱藏欄位中的資訊,這導致潛在的安全性問題。
您可以手動加密和解密隱藏欄位的內容,但這需要額外的編碼和開銷。如果關注安全,請考慮使用基於伺服器的狀態機器制,從而不將敏感資訊發送到用戶端。
2.簡單的儲存結構
隱藏欄位不支援複雜資料類型。
隱藏欄位只提供一個字串範圍存放資訊。
若要儲存多個值,必須實現分隔的字串以及用來分析那些字串的代碼。您可以手動分別將複雜資料類型序列化為隱藏欄位以及將隱藏欄位還原序列化為複雜資料類型。但是,這需要額外的代碼來實現。
如果您需要將複雜資料類型儲存在用戶端上,請考慮使用檢視狀態。檢視狀態內建了序列化,並且將資料存放區在隱藏欄位中。
3.效能注意事項
由於隱藏欄位儲存在頁本身,因此如果儲存較大的值,使用者顯示頁和發送頁時的速度可能會減慢。
4.儲存限制
如果隱藏欄位中的資料量過大,某些代理和防火牆將阻止對包含這些資料的頁的訪問。因為最大數量會隨所採用的防火牆和代理的不同而不同,較大的隱藏欄位可能會出現偶發性問題。
如果您需要儲存大量的資料項目,請考慮執行下列操作之一:
(1)將每個項放置在單獨的隱藏欄位中。
(2)使用檢視狀態並開啟檢視狀態分塊,這樣會自動將資料分割到多個隱藏欄位。
(3)不將資料存放區在用戶端上,將資料保留在伺服器上。向用戶端發送的資料越多,您的應用程式的表面回應時間越慢,因為瀏覽器需要下載或發送更多的資料。
Sql Server2005 Transact-SQL 新兵器學習總結之-總結
MS SQLDatabase Backup和恢複預存程序(加強版本)
sql server中分散式查詢隨筆(連結的伺服器(sp_addlinkedserver)和遠程登入映射(sp_addlinkedsrvlogin)使用小總結)
WAP開發資料站(最新更新)
自訂格式字串隨筆 (IFormattable,IFormatProvider,ICustomFormatter三介面的實現)
Mcad學習筆記之非同步編程(AsyncCallback 委託,IAsyncResult介面,BeginInvoke方法,EndInvoke方法的使用小總結)
Mcad學習筆記之通過反射調用類的方法,屬性,欄位,索引器(2種方法)
Mcad學習筆記之序列化(2進位和Soap序列化)
Mcad學習筆記之委託再理解(delegate的構造器,BeginInvoke,EndInvoke,Invoke4個方法的探討)
WinForm開發,表單顯示和表單傳值相關知識總結
Mcad學習筆記之Microsoft Windows服務
copy某目錄下的所有的目錄和檔案到目的目錄(目錄數據備份)
ASP.NET狀態管理之一(概括篇)