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存儲用戶的編號。
一、HiddenField控件的基本使用
復制代碼 代碼如下:<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事件ValueChanged
HiddenField較為常用的是ValueChanged事件,該事件在Value值發生改變時觸發該事件。然而在實際使用時,要知道頁面記載順序。在頁面回傳過程中,具體的頁面周期你可以到如下網站查看
http://msdn2.microsoft.com/zh-cn/library/ms178472.aspx
下面的例子說明了這個問題
復制代碼 代碼如下:
<html>
<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>
三、用javascript把值傳給HiddenField
javascript直接改變控件的值再後台取不到值,存在HiddenField中變相的取值,代碼如下:
復制代碼 代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>無標題頁</title>
<script type="text/javascript">
function setValue(){
document.getElementById("<%=name.ClientID %>").value="aaaa";
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:HiddenField ID="name" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Button"
OnClientClick="setValue()" onclick="Button1_Click" />
</div>
</form>
</body>
</html>