HiddenField 控件提供了一种在页面中存储信息但不显示信息的方法。例如,可以在 HiddenField 控件中存储用户首选项设置,以便可以在客户端脚本中读取此设置。若要将信息放入 HiddenField 控件中,请在两次回发之间将其 Value 属性设置为要存储的值。
一、功能
可以使用 HiddenField 控件执行下列操作:
·在页上的隐藏字段中存储数据。
·检测存储在隐藏字段中的数据何时在回发之间发生更改。
二、背景
当浏览器呈现页面时,不会显示 HiddenField 控件中的信息。但可以在客户端脚本中读取和设置此信息。回发页时,HiddenField 控件的内容在服务器代码中可用,该控件包括客户端脚本中所做的任何更改。
说明: 虽然不显示隐藏字段中的信息,但用户可通过查看页面的源来查看此控件的内容。不要在 HiddenField 控件中存储敏感信息,如用户 ID、密码或信用卡信息。
检测已更改的数据:
在将页面回发到服务器之前,可以更改 HiddenField 控件的值。由于使用隐藏字段在服务器代码和客户端脚本之间共享信息,并且客户端脚本已更新了控件的值,因此可能发生上述情况。
为了帮助您检测控件中的数据更改,HiddenField 控件会引发 ValueChanged 事件,即使此控件的值在回发之间发生了更改。您可以处理此事件来确定值是否已发生更改。
三、HiddenField 类
HiddenField 控件用于存储一个值,在向服务器的各次发送过程中,需保持该值。它呈现为 <input type= "hidden"/> 元素。
通常情况下,Web 窗体页的状态由视图状态、会话状态和 cookie 来维持。但是,如果这些方法被禁用或不可用,则可以使用 HiddenField 控件来存储状态值。
若要指定 HiddenField 控件的值,请使用 Value 属性。您可以提供这样一个例程,每次由于创建 ValueChanged 事件的事件处理程序,而在向服务器的各次发送过程中更改 HiddenField 控件的值时,都会调用该例程。
示例
下面的示例演示在向服务器的各次发送过程中,如何使用 HiddenField 控件存储 TextBox 控件的值。
安全说明: 此示例有一个接受用户输入的文本框,这是一个潜在的安全威胁。默认情况下,ASP.NET 网页验证用户输入是否不包括脚本或 HTML 元素。
<%@ Page language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
void ValueHiddenField_ValueChanged (Object sender, EventArgs e)
{
// Display the value of the HiddenField control.
Message.Text = "The value of the HiddenField control is " + ValueHiddenField.Value + ".";
}
</script>
<html >
<head runat="server">
<title>HiddenField Example</title>
</head>
<body>
<form id="Form1" runat="server">
<h3>HiddenField Example</h3>
Please enter a value and click the submit button.<br/>
<asp:Textbox id="ValueTextBox"
runat="server"/>
<br/>
<input type="submit" name="SubmitButton"
value="Submit"
onclick="PageLoad()" />
<br/>
<asp:label id="Message" runat="server"/>
<asp:hiddenfield id="ValueHiddenField"
onvaluechanged="ValueHiddenField_ValueChanged"
value=""
runat="server"/>
</form>
</body>
</html>
<script type="text/javascript">
<!--
function PageLoad()
{
// Set the value of the HiddenField control with the
// value from the TextBox.
Form1.ValueHiddenField.value = Form1.ValueTextBox.value;
}
-->
</script>