ASP.NET中HiddenField隐藏域控件的使用方法

2019-05-22 19:45:08王振洲

            <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" />