ASP.NET2.0 HiddenField控件(1)2007-05-12 23:18HiddenField控件顧名思義就是隱藏輸入框的服務器控件,它能讓你保存那些不需要顯示在頁面上的且對安全性要求不高的數據。也許這個時候應該有這么一個疑問,為什么有了ViewState、Session和Cookie等狀態保存機制,還需要用起HiddenField呢?
增加HiddenField,其實是為了讓整個狀態管理機制的應用程度更加全面。因為不管是ViewState、Cookie還是Session,都有其失效的時候,比如用戶因某種需求要求設置ViewState為false,或者環境條件限制使用Cookie,或者用戶長時間沒有動作導致Session過期等等,那這個時候HiddenField無疑是最佳選擇。
HiddenField控件的作用簡單的說是用於存儲需要在向服務器的發送間保持的值。它作為 <input type= "hidden"/> 元素呈現,並且通過添加runat=”server”就可以使它成為標准的HTML服務器控件。下面列出的是ASP.NET HiddenField Web服務器控件可以使用的屬性和事件。
<asp:HiddenField EnableTheming="True|False" EnableViewState="True|False" ID="string" OnDataBinding="DataBinding event handler" OnDisposed="Disposed event handler" OnInit="Init event handler" OnLoad="Load event handler" OnPreRender="PreRender event handler" OnUnload="Unload event handler" OnValueChanged="ValueChanged event handler" runat="server" SkinID="string" Value="string" Visible="True|False" />
因為 HiddenField 的值將呈現給客戶端瀏覽器,所以它不適用於存儲安全敏感的值。若要為 HiddenField 控件指定值,請使用 Value 屬性,請注意是Value而不是Text。事實上HiddenField並沒有Text屬性,這和DropDownList、CheckBoxList等標准按鈕的屬性命名方式一致。在標准的屬性命名方式中,Text的值是呈現給用戶看到的,而Value的值則是通長是通過代碼進行控制的。例如你可以讓DropDownList的Text屬性顯示用戶名而讓它的Value存儲用戶的編號。
下面的代碼顯示的是改控件的基本使用。
<html> <head> <script language="C#" runat="server"> void Button1_Click(object sender, EventArgs e) { if (HiddenField1.Value == String.Empty) HiddenField1.Value = "0"; HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value)+1).ToString(); Label1.Text = HiddenField1.Value; } </script> </head> <body> <h3><font face="Verdana">HiddenField</font></h3> <form runat=server> <asp:HiddenField id=HiddenField1 runat=Server /> <asp:Button id=Button1 Text="單擊按鈕" onclick="Button1_Click" runat="server" /> 單擊 <asp:Label id=Label1 Text="0" runat=server /> 次 </form> </body> </html>
在上面代碼中, <asp:HiddenField id=HiddenField1 runat=Server />就定義了一個隱藏控件在按鈕的單擊事件里計算用戶單擊的次數,並將改次數賦值給Label1。
你可以將上面代碼中的 <asp:HiddenField id=HiddenField1 runat=Server />改為<input type=hidden id=HiddenField1 runat=Server >也是可以的
在使用上面代碼里,如果你從瀏覽器里查看源代碼會得到如下的信息:
<form name="Form1" method="post" action="Default.aspx" id="Form1">
這是因為HiddenField是通過HTTP協議進行傳遞數據的,所以如果你通過" method="get"或者鏈接打開新的窗體頁,那么HiddenField並不可用。
另外,HiddenField並不是取代Session來維護狀態的,在上面例子里,雖然你點擊一次按鈕可以顯示你點擊的次數但是並不是說它可以記錄你的狀態信息。如果你重新打開瀏覽器那么你看到的此處仍然是0而不是3。
HiddenField事件
HiddenField較為常用的是ValueChanged事件,該事件在Value值發生改變時觸發該事件。然而在實際使用時,要知道頁面記載順序。在頁面回傳過程中,具體的頁面周期你可以到如下網站查看
http://msdn2.microsoft.com/zh-cn/library/ms178472.aspx
下面的例子說明了這個問題
<head> <script runat="server" language="c#"> protected void Page_Load(object sender, EventArgs e) {
Response.Write("<p>頁面的Page_Load事件觸發,觸發時間是:" + DateTime.Now.ToString()); if (HiddenField1.Value == String.Empty) HiddenField1.Value = "0";
} protected void Button1_Click(object sender, EventArgs e) {
Response.Write("<p>Button1_Click為改變Hidden的值前事件觸發,觸發時間是:" + DateTime.Now.ToString()); HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) + 1).ToString(); Label1.Text = HiddenField1.Value; } protected void HiddenField1_ValueChanged(object sender, EventArgs e) {
Response.Write("<p>HiddenField的 ValueChanged事件觸發,觸發時間是:" + DateTime.Now.ToString());
} </script> </head> <body> <form id="form1" runat="server"> <div> <asp:HiddenField ID="HiddenField1" runat="server" OnValueChanged="HiddenField1_ValueChanged" /> </div> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <br /> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> </form></body> </html>