Элемент управления HiddenField, как следует из названия, представляет собой серверный элемент управления, скрывающий поля ввода. Он позволяет сохранять данные, которые не нужно отображать на странице, и не требует высокого уровня безопасности. Возможно, сейчас должен возникнуть вопрос: почему нам все еще нужно использовать HiddenField, когда у нас есть механизмы сохранения состояния, такие как ViewState, Session и Cookie?
Цель добавления HiddenField — сделать применение всего механизма управления состоянием более комплексным. Потому что, будь то ViewState, Cookie или Session, наступит момент, когда срок его действия истечет. Например, пользователю необходимо установить для ViewState значение false из-за определенных потребностей, или условия окружающей среды ограничивают использование Cookie, или пользователь был неактивен. в течение длительного времени, вызывающего истечение срока действия сеанса и т. д. В настоящее время HiddenField, несомненно, является лучшим выбором.
Функция элемента управления HiddenField — просто хранить значения, которые необходимо поддерживать между отправкой на сервер. Он отображается как элемент <input type="hidden"/> и может быть преобразован в стандартный серверный элемент управления HTML, добавив runat="server". Ниже перечислены свойства и события, доступные для веб-серверного элемента управления ASP.NET HiddenField.
<asp:HiddenField
EnableTheming="True|False"
EnableViewState="True|False"
ID="строка"
OnDataBinding="Обработчик событий привязки данных"
OnDispose="Обработчик удаленного события"
OnInit="Обработчик событий инициализации"
OnLoad="Загрузить обработчик событий"
OnPreRender="Обработчик событий PreRender"
OnUnload="Обработчик события выгрузки"
OnValueChanged="Обработчик события ValueChanged"
runat="сервер"
SkinID="строка"
Значение="строка"
Видимый="Истина|Ложь"
/>
Поскольку значение HiddenField будет отображаться в клиентском браузере, оно не подходит для хранения значений, чувствительных к безопасности. Чтобы указать значение для элемента управления HiddenField, используйте свойство Value. Обратите внимание, что это значение, а не текст. Фактически HiddenField не имеет свойства Text, которое соответствует именованию свойств стандартных кнопок, таких как DropDownList и CheckBoxList. В стандартном методе именования свойств значение Text представляется пользователю, а значение Value контролируется с помощью кода. Например, вы можете сделать так, чтобы свойство Text DropDownList отображало имя пользователя, а его значение хранило номер пользователя.
Код ниже показывает базовое использование элемента управления.
<html>
<голова>
<script Language="C#" runat="server">
void Button1_Click (отправитель объекта, EventArgs e)
{
если (HiddenField1.Value == String.Empty)
HiddenField1.Значение = "0";
HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value)+1).ToString();
Метка1.Текст = СкрытоеПоле1.Значение;
}
</скрипт>
</голова>
<тело>
<h3><font face="Verdana">HiddenField</font></h3>
<форма runat=сервер>
<asp:HiddenField id=HiddenField1 runat=Сервер />
<asp:Button id=Button1 Text="Нажмите кнопку" onclick="Button1_Click" runat="server" />
Щелкнул <asp:Label id=Label1 Text="0" runat=server /> раз.
</форма>
</тело>
</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 не заменяет сеанс для сохранения статуса. В приведенном выше примере, хотя вы нажимаете кнопку один раз, чтобы отобразить количество кликов, это не означает, что он может записывать информацию о вашем статусе. Если вы снова откроете браузер, вы все равно увидите здесь 0 вместо 3.
Событие скрытого поля
Более часто используемым HiddenField является событие ValueChanged, которое запускается при изменении значения. Однако при реальном использовании необходимо знать порядок записи страниц. В процессе обратной передачи страницы вы можете проверить цикл конкретной страницы на следующем веб-сайте.
http://msdn2.microsoft.com/zh-cn/library/ms178472.aspx
Следующий пример иллюстрирует эту проблему
<head>
<script runat="server" Language="c#">
protected void Page_Load (отправитель объекта, EventArgs e)
{ Response.Write("<p>Событие Page_Load страницы инициируется, и время триггера: " + DateTime.Now.ToString());
если (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>Событие ValueChanged HiddenField срабатывает, и время срабатывания: " + DateTime.Now.ToString()) } </
скрипт>
</head>
<body>
<form id="form1" runat="server">
<div> <asp:HiddenField ID="HiddenField1" runat="server" OnValueChanged="HiddenField1_ValueChanged" />
</div> <asp :Label ID="Label1" runat="server" Text="Label"></asp:Label>
<br /> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text=" Кнопка" />
</form></body>
</html>
В этом примере мы хотим получить следующий результат: когда пользователь нажимает кнопку, значение HiddenField1 изменяется с помощью события Button1_Click кнопки, а затем запускается событие HiddenField1_ValueChanged HiddenField1. Однако так ли это на самом деле?
Запустите приведенный выше код и получите результат. Как видите, кнопка меняет значение HiddenField при каждом нажатии, но вывод, который мы определили в HiddenField1_ValueChanged, не выполняется. Другими словами, страница не выполняет. Событие ValueChanged Чтобы понять эту проблему, вам также необходимо понять цикл объявления страницы. Во время цикла страницы вы можете видеть, что свойства элемента управления считываются или инициализируются в Page_Init, а затем в событиях управления.
Здесь событие означает: в событии Page_Init веб-страница примет данные, возвращаемые пользователем, например, назначит <span id="Label1">Label</span> атрибуту Text с идентификатором Label1 и <input type Значение ="hidden" name="HiddenField1" id="HiddenField1" value="0" /> присваивается свойству Value HiddenField1. После завершения всей инициализации страница начинает выполнять управляющее событие — Button1_Click и изменяет значение HiddenField в событии Button. Итак, поскольку здесь значение было изменено, почему событие ValueChanged не выполняется?
В настоящее время, хотя значение Value здесь было изменено, оно сохраняется в Page_Init. Это связано с тем, что при нажатии кнопки Button, хотя HiddenField изменяется, ответ страницы также запускается снова, то есть несмотря на то, что HiddenField изменяется. предыдущее HiddenValue Значение равно 0, и на этот раз его значение изменено на 1. Однако после обратной публикации страницы, поскольку ViewState сохранит последнюю установку (здесь 1), поэтому в Page_Init считается начальное значение HiddenField быть 1, и на этот раз время по-прежнему равно 1, что создает ощущение, что данные не изменились, поэтому событие ValueChanged все равно не будет запущено.
Конечно, вы можете отключить HiddenField для обработки и выполнить ValueChanged. событие, но на самом деле после отключения ViewState страница больше не сохраняет значение ViewState, поэтому страница считает, что каждый запрос HiddenField является новым, например следующий код:
Вы не изменили значение Hiddenfield, но оно все равно выполняется каждый раз.
<%@ Страница EnableViewState="false" %>
<голова>
<script runat="server" Language="c#">
protected void Page_Load(object sender, EventArgs e)
{
if (HiddenField1.Value == String.Empty)
HiddenField1.Value = "111"
}
;
protected void Button1_Click(object sender, EventArgs e)
{ // HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) + 1).ToString();
Label1.Text = TextBox1.Text; }
protected void HiddenField1_ValueChanged(отправитель объекта, EventArgs e)
{ Response.Write("Changed." + DateTime.Now.ToString());
Response.Write(HiddenField1.Value);
Response.Write(TextBox1.Text) }
</script>
;
</голова>
<body>
<form id="form1" runat="server"> <div>
<asp:HiddenField ID="HiddenField1" runat="server" OnValueChanged="HiddenField1_ValueChanged" />
</div>
<asp:Label ID= "Label1" runat="server" Text="Label"></asp:Label>
<br />
<asp:TextBox runat=server ID=TextBox1></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</form>
</body >
</html>
Использование HiddenFile в сочетании со страницей «Кросс-страница», предоставляемой ASP.NET2.0, может реализовать передачу данных страницы. Эта ситуация предназначена для такого решения:
На странице регистрации пользователю необходимо ввести данные. Поскольку в столбце примечаний может быть много данных, в новом окне можно использовать элемент управления, аналогичный FreeTextBox, чтобы позволить пользователю форматировать текст и после ввода. завершена, вернитесь на исходную страницу регистрации. Что касается этой ситуации, мы представим ее позже.