asp.net|控制項
HiddenField控制項顧名思義就是隱藏輸入框的伺服器控制項,它能讓你儲存那些不需要顯示在頁面上的且對安全性要求不高的資料。也許這個時候應該有這麼一個疑問,為什麼有了ViewState、Session和Cookie等狀態儲存機制,還需要“返回老套”用起HiddenField呢?增加HiddenField,其實是為了讓整個狀態管理機制的應用程度更加全面。因為不管是ViewState、Session還是Cookie,都有其失效的時候(比如使用者因某種需求要求設定ViewState為false,或者環境條件限制使用Session或Cookie等等),那這個時候HiddenField無疑是最佳選擇,也說明了簡單實用的東西永遠不會到期的道理。
說到這裡,聯想起前面的BulletedList控制項的產生理由,竟然也有異曲同工之處。我想,它們雖然都是“不起眼”的控制項,但是它們的再次出現帶給我們的思考和意義遠遠比它們的技術應用帶給我們的多得多。扔掉“小看”任何東西的眼鏡,你都會發現它值得誇耀的一面。
HiddenField控制項的主要成員有Value屬性和ValueChanged事件:
l Value:儲存在隱藏輸入框中的值。
l ValueChanged:在Value值發生改變時觸發該事件。不過在我的調試過程中,發現還應該再設定HiddenField控制項的EnableViewState屬性為False方可,預設為True的情況下將視Value值沒有發生改變,從而無法觸發該事件。
簡單樣本:Default.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (HiddenField1.Value == String.Empty)
HiddenField1.Value = "0";
}
protected void Button1_Click(object sender, EventArgs e)
{
HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) + 1).ToString();
Label1.Text = HiddenField1.Value;
}
protected void HiddenField1_ValueChanged(object sender, EventArgs e)
{
Response.Write("Changed." + DateTime.Now.ToString());
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:HiddenField ID="HiddenField1" runat="server" OnValueChanged="HiddenField1_ValueChanged" EnableViewState="False" />
</div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<br />
<asp:Button ID="Button1" runat="server" Text="Button" />
</form>
</body>
</html>
[總結]:誠如前面所說,HiddenField雖然是個“不起眼”的控制項,但是它的再次出現帶給我們的思考和意義遠遠比它的技術應用帶給我們的多得多。
[參考資料]:
1. MSDN Library for Visual Studio 2005 beta2
2. http://beta.asp.net/QUICKSTART/aspnet/default.aspx