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>