El control HiddenField, como su nombre indica, es un control de servidor que oculta cuadros de entrada. Le permite guardar datos que no necesitan mostrarse en la página y no requieren alta seguridad. Quizás debería haber una pregunta en este momento: ¿por qué todavía necesitamos usar HiddenField cuando tenemos mecanismos de ahorro de estado como ViewState, Session y Cookie?
El propósito de agregar HiddenField es hacer que la aplicación de todo el mecanismo de gestión estatal sea más completa. Porque ya sea ViewState, Cookie o Session, habrá un momento en el que caducará. Por ejemplo, el usuario debe configurar ViewState en falso debido a ciertas necesidades, o las condiciones ambientales restringen el uso de Cookie, o el usuario ha estado inactivo. durante mucho tiempo provocando que la sesión caduque, etc. En este momento, HiddenField es sin duda la mejor opción.
La función del control HiddenField es simplemente almacenar los valores que deben mantenerse entre envíos al servidor. Se representa como un elemento <input type="hidden"/> y se puede convertir en un control de servidor HTML estándar agregando runat="server". A continuación se enumeran las propiedades y eventos disponibles para el control del servidor web ASP.NET HiddenField.
<asp:campo oculto
EnableTheming="Verdadero|Falso"
EnableViewState="Verdadero|Falso"
ID="cadena"
OnDataBinding="controlador de eventos DataBinding"
OnDisposed="Manejador de eventos eliminados"
OnInit="Iniciar controlador de eventos"
OnLoad="Cargar controlador de eventos"
OnPreRender="controlador de eventos PreRender"
OnUnload="Descargar controlador de eventos"
OnValueChanged="controlador de eventos ValueChanged"
runat="servidor"
SkinID="cadena"
Valor="cadena"
Visible="Verdadero|Falso"
/>
Debido a que el valor de HiddenField se representará en el navegador del cliente, no es adecuado para almacenar valores sensibles a la seguridad. Para especificar un valor para el control HiddenField, utilice la propiedad Valor. Tenga en cuenta que es Valor y no Texto. De hecho, HiddenField no tiene una propiedad de Texto, lo cual es consistente con el nombre de propiedad de botones estándar como DropDownList y CheckBoxList. En el método de denominación de propiedades estándar, el valor de Texto se presenta al usuario, mientras que el valor de Valor se controla mediante código. Por ejemplo, puede hacer que la propiedad Texto de DropDownList muestre el nombre del usuario y su Valor almacene el número del usuario.
El siguiente código muestra el uso básico del control.
<html>
<cabeza>
<script language="C#" runat="servidor">
void Button1_Click (remitente del objeto, EventArgs e)
{
si (HiddenField1.Value == String.Empty)
HiddenField1.Value = "0";
HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value)+1).ToString();
Etiqueta1.Texto = CampoOculto1.Value;
}
</script>
</cabeza>
<cuerpo>
<h3><font face="Verdana">Campo Oculto</font></h3>
<formulario runat=servidor>
<asp:HiddenField id=HiddenField1 runat=Servidor />
<asp:Button id=Button1 Text="Haga clic en el botón" onclick="Button1_Click" runat="servidor" />
Se hizo clic <asp:Label id=Label1 Text="0" runat=server /> veces
</formulario>
</cuerpo>
</html>
En el código anterior, <asp:HiddenField id=HiddenField1 runat=Server /> define un control oculto que cuenta el número de clics del usuario en el evento de clic del botón y asigna el número de cambios a Label1.
Puede cambiar <asp:HiddenField id=HiddenField1 runat=Server /> en el código anterior a <input type=hidden id=HiddenField1 runat=Server>. También es posible
utilizar el código anterior si ve el código fuente. navegador El código obtendrá la siguiente información:
<nombre del formulario="Form1" método="post" acción="Default.aspx" id="Form1">
Esto se debe a que HiddenField transmite datos a través del protocolo HTTP, por lo que si abre una nueva página de formulario a través de "method="get" o un enlace, HiddenField no está disponible.
Además, HiddenField no reemplaza la sesión para mantener el estado. En el ejemplo anterior, aunque haga clic en el botón una vez para mostrar el número de clics, eso no significa que pueda registrar su información de estado. Si vuelve a abrir el navegador, seguirá viendo 0 aquí en lugar de 3.
Evento de campo oculto
El HiddenField más utilizado es el evento ValueChanged, que se activa cuando cambia el valor. Sin embargo, en el uso real, es necesario conocer el orden de grabación de las páginas. Durante el proceso de devolución de datos de la página, puede verificar el ciclo de la página específica en el siguiente sitio web
http://msdn2.microsoft.com/zh-cn/library/ms178472.aspx
El siguiente ejemplo ilustra este problema
<head>
<script runat="servidor" idioma="c#">
Page_Load vacío protegido (remitente del objeto, EventArgs e)
{ Response.Write("<p>El evento Page_Load de la página se activa y el tiempo de activación es: " + DateTime.Now.ToString());
si (HiddenField1.Value == String.Empty)
HiddenField1.Value = "0"; }
protected void Button1_Click(object sender, EventArgs e)
{ Response.Write("<p>Button1_Click es un evento que se activa antes de cambiar el valor de Hidden. El tiempo de activación es: " + 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>El evento ValueChanged de HiddenField se activa y el tiempo de activación es: " + DateTime.Now.ToString()) ; }
</script>
</head>
<body>
<form id="form1" runat="servidor">
<div> <asp:HiddenField ID="HiddenField1" runat="servidor" OnValueChanged="HiddenField1_ValueChanged" />
</div> <asp :Label ID="Label1" runat="servidor" Text="Label"></asp:Label>
<br /> <asp:Button ID="Button1" runat="servidor" OnClick="Button1_Click" Text=" Botón" />
</form></body>
</html>
En este ejemplo, el resultado que queremos es: cuando el usuario hace clic en el botón, el valor de HiddenField1 se cambia mediante el evento Button1_Click del botón y luego se activa el evento HiddenField1_ValueChanged de HiddenField1. Sin embargo, ¿es este realmente el caso?
Ejecute el código anterior y obtenga el resultado. Como puede ver, el botón cambia el valor de HiddenField cada vez que se hace clic en él, pero la salida que definimos en HiddenField1_ValueChanged no se ejecuta. Evento ValueChanged. Para comprender este problema, también debe comprender el ciclo de declaración de la página. Durante el ciclo de la página, puede ver que las propiedades de control se leen o inicializan en Page_Init y luego en los eventos de Control.
El evento aquí significa: En el evento Page_Init, la página web aceptará los datos devueltos por el usuario, por ejemplo, asignará <span id="Label1">Label</span> al atributo Texto con ID Label1 y <input tipo El valor de ="hidden" name="HiddenField1" id="HiddenField1" value="0" /> se asigna a la propiedad Valor de HiddenField1. Una vez completada toda la inicialización, la página comienza a ejecutar el evento de control - Button1_Click, y cambia el valor de HiddenField en el evento Button. Entonces, dado que el valor se cambió aquí, ¿por qué no se ejecuta el evento ValueChanged?
En este momento, aunque el valor del Valor se ha cambiado aquí, se guarda en Page_Init. Esto se debe a que cuando se hace clic en el botón Botón, aunque se cambia el Campo Oculto, la respuesta de la página también se activa nuevamente, es decir, aunque el valor del Valor se cambia aquí. anterior HiddenValue El valor es 0, y esta vez su valor se cambia a 1. Sin embargo, después de que se vuelve a publicar la página, dado que ViewState guardará la última instalación (aquí está 1), por lo que en Page_Init, se considera el valor inicial de HiddenField. ser 1, y esta vez Los tiempos siguen siendo 1, lo que hace que parezca que los datos no han cambiado, por lo que el evento ValueChanged aún no se activará.
Por supuesto, puede deshabilitar HiddenField para su procesamiento y puede ejecutar ValueChanged. evento, pero de hecho, después de deshabilitar ViewState, la página ya no guarda el valor de ViewState, por lo que la página piensa que cada solicitud de HiddenField es nueva, como el siguiente código:
No cambiaste el valor de Hiddenfield, pero aún así se ejecuta siempre.
<%@ Página EnableViewState="false" %>
<cabeza>
<script runat="server" language="c#">
protected void Page_Load(objeto remitente, EventArgs e)
{
if (HiddenField1.Value == String.Empty)
HiddenField1.Value = "111"
}
protected void Button1_Click(remitente del objeto, EventArgs e)
{ // HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) + 1).ToString();
Label1.Text = TextBox1.Text; }
protected void HiddenField1_ValueChanged(remitente del objeto, EventArgs e)
{ Response.Write("Changed." + DateTime.Now.ToString());
Respuesta.Escribir(HiddenField1.Value);
Respuesta.Escribir(TextBox1.Texto); }
</script>
</cabeza>
<cuerpo>
<form id="form1" runat="servidor"> <div>
<asp:HiddenField ID="HiddenField1" runat="servidor" OnValueChanged="HiddenField1_ValueChanged" />
</div>
<asp:Label ID= "Label1" runat="servidor" Text="Label"></asp:Label>
<br />
<asp:TextBox runat=ID del servidor=TextBox1></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</form>
</body >
</html>
El uso de HiddenFile combinado con la página "Cross Page" proporcionada por ASP.NET2.0 puede realizar la transferencia de datos de la página. Esta situación es para tal solución:
En una página de registro, el usuario necesita ingresar datos. Dado que puede haber muchos datos en la columna de comentarios, se puede usar un control similar a FreeTextBox en una nueva ventana para permitir al usuario formatear el texto y después de la entrada. Una vez completado, regrese a la página de registro original. Respecto a esta situación, la presentaremos más adelante.