转自MS.Tech
HiddenField控件顾名思义就是隐藏输入框的服务器控件,它能让你保存那些不需要显示在页面上的且对安全性要求不高的数据。也许这个时候应该有这么一个疑问,为什么有了ViewState、Session和Cookie等状态保存机制,还需要“返回老套”用起HiddenField呢?增加HiddenField,其实是为了让整个状态管理机制的应用程度更加全面。因为不管是ViewState、Session还是Cookie,都有其失效的时候(比如用户因某种需求要求设置ViewState为false,或者环境条件限制使用Session或Cookie等等),那这个时候HiddenField无疑是最佳选择,也说明了简单实用的东西永远不会过期的道理。<o:p></o:p>
说到这里,联想起前面的BulletedList控件的产生理由,竟然也有异曲同工之处。我想,它们虽然都是“不起眼”的控件,但是它们的再次出现带给我们的思考和意义远远比它们的技术应用带给我们的多得多。扔掉“小看”任何东西的眼镜,你都会发现它值得夸耀的一面。<o:p></o:p>
HiddenField控件的主要成员有Value属性和ValueChanged事件:<o:p></o:p>
<o:p> </o:p>
l Value:保存在隐藏输入框中的值。<o:p></o:p>
l ValueChanged:在Value值发生改变时触发该事件。不过在我的调试过程中,发现还应该再设置HiddenField控件的EnableViewState属性为False方可,默认为True的情况下将视Value值没有发生改变,从而无法触发该事件。<o:p></o:p>
<o:p> </o:p>
简单示例:Default.aspx<o:p></o:p>
<o:p> </o:p>
<%@ Page Language="C#" %><o:p></o:p>
<o:p> </o:p>
<!DOCTYPE html PUBLIC "-//W<st1:chmetcnv unitname="C" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">3C</st1:chmetcnv>//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><o:p></o:p>
<o:p> </o:p>
<script runat="server"><o:p></o:p>
protected void Page_Load(object sender, EventArgs e)<o:p></o:p>
{<o:p></o:p>
if (HiddenField1.Value == String.Empty)<o:p></o:p>
HiddenField1.Value = "0";<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
protected void Button1_Click(object sender, EventArgs e)<o:p></o:p>
{<o:p></o:p>
HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) + 1).ToString();<o:p></o:p>
Label1.Text = HiddenField1.Value;<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
protected void HiddenField1_ValueChanged(object sender, EventArgs e)<o:p></o:p>
{<o:p></o:p>
Response.Write("Changed." + DateTime.Now.ToString());<o:p></o:p>
}<o:p></o:p>
</script><o:p></o:p>
<o:p> </o:p>
<html xmlns="http://www.w3.org/1999/xhtml" ><o:p></o:p>
<head runat="server"><o:p></o:p>
<title>Untitled Page</title><o:p></o:p>
</head><o:p></o:p>
<body><o:p></o:p>
<form id="form1" runat="server"><o:p></o:p>
<div><o:p></o:p>
<asp:HiddenField ID="HiddenField1" runat="server" OnValueChanged="HiddenField1_ValueChanged" EnableViewState="False" /><o:p></o:p>
</div><o:p></o:p>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><o:p></o:p>
<br /><o:p></o:p>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /><o:p></o:p>
</form><o:p></o:p>
</body><o:p></o:p>
</html><o:p></o:p>
<o:p> </o:p>
[总结]:诚如前面所说,HiddenField虽然是个“不起眼”的控件,但是它的再次出现带给我们的思考和意义远远比它的技术应用带给我们的多得多。<o:p></o:p>
<o:p> </o:p>
[参考资料]:<o:p></o:p>
1. MSDN Library for Visual Studio 2005 beta2
2. http://beta.asp.net/QUICKSTART/aspnet/default.aspx