ASP.NET中HiddenField隐藏域控件的使用方法
HiddenField控件的作用简单的说是用于存储需要在向服务器的发送间保持的值。它作为<inputtype="hidden"/>元素呈现,并且通过添加runat=”server”就可以使它成为标准的HTML服务器控件。下面列出的是ASP.NETHiddenFieldWeb服务器控件可以使用的属性和事件。
<asp:HiddenField EnableTheming="True|False" EnableViewState="True|False" ID="string" OnDataBinding="DataBindingeventhandler" OnDisposed="Disposedeventhandler" OnInit="Initeventhandler" OnLoad="Loadeventhandler" OnPreRender="PreRendereventhandler" OnUnload="Unloadeventhandler" OnValueChanged="ValueChangedeventhandler" 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> <scriptlanguage="C#"runat="server"> voidButton1_Click(objectsender,EventArgse) { if(HiddenField1.Value==String.Empty) HiddenField1.Value="0"; HiddenField1.Value=(Convert.ToInt32(HiddenField1.Value)+1).ToString(); Label1.Text=HiddenField1.Value; } </script> </head> <body> <h3><fontface="Verdana">HiddenField</font></h3> <formrunat=server> <asp:HiddenFieldid=HiddenField1runat=Server/> <asp:Buttonid=Button1Text="单击按钮"onclick="Button1_Click"runat="server"/> 单击<asp:Labelid=Label1Text="0"runat=server/>次 </form> </body> </html>
在上面代码中,<asp:HiddenFieldid=HiddenField1runat=Server/>就定义了一个隐藏控件在按钮的单击事件里计算用户单击的次数,并将改次数赋值给Label1。
你可以将上面代码中的<asp:HiddenFieldid=HiddenField1runat=Server/>改为<inputtype=hiddenid=HiddenField1runat=Server>也是可以的
在使用上面代码里,如果你从浏览器里查看源代码会得到如下的信息:
<formname="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> <scriptrunat="server"language="c#"> protectedvoidPage_Load(objectsender,EventArgse) { Response.Write("<p>页面的Page_Load事件触发,触发时间是:"+DateTime.Now.ToString()); if(HiddenField1.Value==String.Empty) HiddenField1.Value="0"; } protectedvoidButton1_Click(objectsender,EventArgse) { Response.Write("<p>Button1_Click为改变Hidden的值前事件触发,触发时间是:"+DateTime.Now.ToString()); HiddenField1.Value=(Convert.ToInt32(HiddenField1.Value)+1).ToString(); Label1.Text=HiddenField1.Value; } protectedvoidHiddenField1_ValueChanged(objectsender,EventArgse) { Response.Write("<p>HiddenField的ValueChanged事件触发,触发时间是:"+DateTime.Now.ToString()); } </script> </head> <body> <formid="form1"runat="server"> <div><asp:HiddenFieldID="HiddenField1"runat="server"OnValueChanged="HiddenField1_ValueChanged"/> </div><asp:LabelID="Label1"runat="server"Text="Label"></asp:Label> <br/><asp:ButtonID="Button1"runat="server"OnClick="Button1_Click"Text="Button"/> </form></body> </html>
三、用javascript把值传给HiddenField
javascript直接改变控件的值再后台取不到值,存在HiddenField中变相的取值,代码如下:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"> <headrunat="server"> <title>无标题页</title> <scripttype="text/javascript"> functionsetValue(){ document.getElementById("<%=name.ClientID%>").value="aaaa"; } </script> </head> <body> <formid="form1"runat="server"> <div> <asp:HiddenFieldID="name"runat="server"/> <asp:ButtonID="Button1"runat="server"Text="Button" OnClientClick="setValue()"onclick="Button1_Click"/> </div> </form> </body> </html>