O controle HiddenField, como o próprio nome sugere, é um controle de servidor que oculta caixas de entrada. Ele permite salvar dados que não precisam ser exibidos na página e não requerem alta segurança. Talvez deva haver uma pergunta neste momento: por que ainda precisamos usar HiddenField quando temos mecanismos de salvamento de estado como ViewState, Session e Cookie?
O objetivo de adicionar HiddenField é tornar a aplicação de todo o mecanismo de gerenciamento de estado mais abrangente. Porque seja ViewState, Cookie ou Session, haverá um momento em que ele expirará. Por exemplo, o usuário precisa definir ViewState como falso devido a certas necessidades, ou as condições ambientais restringem o uso do Cookie, ou o usuário está inativo. por muito tempo fazendo com que a sessão expire, etc. Neste momento, HiddenField é sem dúvida a melhor escolha.
A função do controle HiddenField é simplesmente armazenar os valores que precisam ser mantidos entre o envio ao servidor. Ele é renderizado como um elemento <input type="hidden"/> e pode ser transformado em um controle de servidor HTML padrão adicionando runat="server". Listados abaixo estão as propriedades e eventos disponíveis para o controle do servidor web ASP.NET HiddenField.
<asp:CampoOculto
EnableTheming="Verdadeiro|Falso"
EnableViewState="Verdadeiro|Falso"
ID="sequência"
OnDataBinding="Manipulador de eventos DataBinding"
OnDisposed = "Manipulador de eventos descartados"
OnInit="Manipulador de eventos de inicialização"
OnLoad="Carregar manipulador de eventos"
OnPreRender="Manipulador de eventos Pré-Render"
OnUnload="Descarregar manipulador de eventos"
OnValueChanged="Manipulador de eventos ValueChanged"
runat = "servidor"
SkinID="string"
Valor="string"
Visível="Verdadeiro|Falso"
/>
Como o valor do HiddenField será renderizado para o navegador do cliente, ele não é adequado para armazenar valores sensíveis à segurança. Para especificar um valor para o controle HiddenField, use a propriedade Value. Observe que é Valor e não Texto. Na verdade, HiddenField não possui uma propriedade Text, que é consistente com a nomenclatura de propriedades de botões padrão, como DropDownList e CheckBoxList. No método de nomenclatura de propriedade padrão, o valor de Text é apresentado ao usuário, enquanto o valor de Value é controlado por meio de código. Por exemplo, você pode fazer com que a propriedade Text do DropDownList exiba o nome do usuário e seu Valor armazene o número do usuário.
O código abaixo mostra o uso básico do controle.
<html>
<cabeça>
<linguagem de script="C#" runat="servidor">
void Button1_Click(objeto remetente, EventArgs e)
{
if (HiddenField1.Value == String.Empty)
HiddenField1.Value = "0";
HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value)+1).ToString();
Label1.Text = HiddenField1.Value;
}
</script>
</head>
<corpo>
<h3><font face="Verdana">Campo Oculto</font></h3>
<form runat=servidor>
<asp:HiddenField id=HiddenField1 runat=Servidor />
<asp:Button id=Button1 Text="Clique no botão" onclick="Button1_Click" runat="servidor" />
Clicou <asp:Label id=Label1 Text="0" runat=server /> vezes
</form>
</body>
</html>
No código acima, <asp:HiddenField id=HiddenField1 runat=Server /> define um controle oculto que conta o número de cliques do usuário no evento de clique do botão e atribui o número de alterações ao Label1.
acima
para <input type=hidden id=HiddenField1 runat=Server>.
navegador O código obterá as seguintes informações:
<form name="Form1" method="post" action="Default.aspx" id="Form1">
Isso ocorre porque o HiddenField transmite dados através do protocolo HTTP, portanto, se você abrir uma nova página de formulário através de "method="get" ou de um link, o HiddenField não estará disponível.
Além disso, HiddenField não substitui Session para manter o status. No exemplo acima, embora você clique no botão uma vez para exibir o número de cliques, isso não significa que ele pode registrar suas informações de status. Se você reabrir o navegador, ainda verá 0 aqui em vez de 3.
Evento HiddenField
O HiddenField mais comumente usado é o evento ValueChanged, que é acionado quando o valor é alterado. No entanto, no uso real, você deve saber a ordem de gravação das páginas. Durante o processo de postback da página, você pode verificar o ciclo específico da página no seguinte site
http://msdn2.microsoft.com/zh-cn/library/ms178472.aspx
O exemplo a seguir ilustra esse problema
<head>
<script runat="servidor" idioma="c#">
protegido void Page_Load (remetente do objeto, EventArgs e)
{ Response.Write("<p>O evento Page_Load da página é acionado e o tempo de acionamento é: " + DateTime.Now.ToString());
if (HiddenField1.Value == String.Empty)
HiddenField1.Value = "0"; }
protected void Button1_Click(object sender, EventArgs e)
{ Response.Write("<p>Button1_Click é um evento acionado antes de alterar o valor de Hidden. O horário de acionamento é: " + 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>O evento ValueChanged de HiddenField é acionado e o tempo de acionamento é: " + DateTime.Now.ToString()) ; }
</script>
</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=" Botão" />
</form></body>
</html>
Neste exemplo, o resultado que queremos é: quando o usuário clica no botão, o valor de HiddenField1 é alterado através do evento Button1_Click do botão, e então o evento HiddenField1_ValueChanged de HiddenField1 é acionado.
Execute o código acima e obtenha o resultado. Como você pode ver, o Button altera o valor do HiddenField toda vez que é clicado, mas a saída que definimos em HiddenField1_ValueChanged não é executada. Evento ValueChanged Para entender esse problema, você também precisa entender o ciclo de declaração da página. Durante o ciclo da página, você pode ver que as propriedades do controle são lidas ou inicializadas em Page_Init e, em seguida, nos eventos de controle.
O evento aqui significa: No evento Page_Init, a página da web aceitará os dados retornados pelo usuário, por exemplo, atribua <span id="Label1">Label</span> ao atributo Text com ID Label1 e <input type O valor de ="hidden" name="HiddenField1" id="HiddenField1" value="0" /> é atribuído à propriedade Value de HiddenField1. Após toda a inicialização ser concluída, a página começa a executar o evento de controle - Button1_Click, e altera o valor do HiddenField no evento Button. Então, como o Value foi alterado aqui, por que o evento ValueChanged não foi executado?
Neste momento, embora o valor do Valor tenha sido alterado aqui, ele é salvo em Page_Init. Isso ocorre porque quando o botão Button é clicado, embora o HiddenField seja alterado, a resposta da página também é acionada novamente, ou seja, embora o HiddenField seja alterado. anterior HiddenValue O valor é 0, e desta vez seu valor é alterado para 1. Porém, após a página ser postada de volta, já que ViewState salvará a última instalação (aqui é 1), então em Page_Init, o valor inicial de HiddenField é considerado para ser 1, e desta vez Os tempos ainda são 1, o que faz com que pareça que os dados não foram alterados, então o evento ValueChanged ainda não será acionado.
Claro, você pode desabilitar HiddenField para processamento e pode executar o ValueChanged. evento, mas na verdade depois de desabilitar o ViewState, a página não salva mais o valor do ViewState, então a página pensa que cada solicitação para HiddenField é nova, como o seguinte código:
Você não alterou o valor de Hiddenfield, mas ele ainda é executado sempre.
<%@Página EnableViewState="false" %>
<cabeça>
<script runat="server" language="c#">
protected void Page_Load(object sender, EventArgs e)
{
if (HiddenField1.Value == String.Empty)
HiddenField1.Value = "111"
}
;
protegido void Button1_Click(objeto remetente, EventArgs e)
{ // HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) + 1).ToString();
Label1.Text = TextBox1.Text; }
protegido void HiddenField1_ValueChanged(objeto remetente, EventArgs e)
{ Response.Write("Alterado." + DateTime.Now.ToString());
Response.Write(HiddenField1.Value);
TextBox1.Text
);
</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:TextBox runat=server ID=TextBox1></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</form>
</body >
</html>
Usar HiddenFile combinado com a página "Cross Page" fornecida pelo ASP.NET2.0 pode realizar a transferência de dados da página. Esta situação é para tal solução:
Em uma página de cadastro o usuário precisa inserir dados Como pode haver muitos dados na coluna de comentários, um controle semelhante ao FreeTextBox pode ser utilizado em uma nova janela para permitir ao usuário formatar o texto e após a entrada. estiver concluído, retorne à página de registro original. Em relação a esta situação, iremos apresentá-la mais tarde