Compartilhar via


Uso de TextBoxWatermark com controles de validação (C#)

por Christian Wenz

Baixar PDF

O controle TextBoxWatermark no Kit de Ferramentas de Controle AJAX estende uma caixa de texto para que um texto seja exibido dentro da caixa. Quando um usuário clica na caixa, ela é esvaziada. Se o usuário sair da caixa sem inserir texto, o texto pré-preenchido reaparecerá. Isso pode colidir com ASP.NET controles de validação na mesma página, mas esses problemas podem ser superados.

Visão geral

O TextBoxWatermark controle no Kit de Ferramentas de Controle AJAX estende uma caixa de texto para que um texto seja exibido dentro da caixa. Quando um usuário clica na caixa, ela é esvaziada. Se o usuário sair da caixa sem inserir texto, o texto pré-preenchido reaparecerá. Isso pode colidir com ASP.NET controles de validação na mesma página, mas esses problemas podem ser superados.

Etapas

A configuração básica do exemplo é a seguinte: um TextBox controle é marcado como marca d'água usando um TextBoxWatermarkExtender controle . Um botão dispara um postback e, posteriormente, será usado para disparar os controles de validação na página. Além disso, um ScriptManager controle é necessário para inicializar ASP.NET AJAX:

<form id="form1" runat="server">
 <asp:ScriptManager ID="asm" runat="server" />
 <div>
 <asp:TextBox ID="Name" runat="server" /> <br />
 <asp:Button ID="btn" runat="server" Text="Submit" OnClick="btn_Click" /><br />
 <asp:Label ID="lbl" runat="server" />
 </div>
 <ajaxToolkit:TextBoxWatermarkExtender ID="tbwe" runat="server"
 TargetControlID="Name" WatermarkText=" Your Name " />
</form>

Agora, adicione um RequiredFieldValidator controle que verifica se há texto no campo quando o formulário é enviado. A InitialValue propriedade do validador deve ser definida com o mesmo valor usado no TextBoxWatermarkExtender controle: quando o formulário é enviado, o valor de uma caixa de texto inalterada é o valor da marca d'água dentro dele:

<asp:RequiredFieldValidator ID="rfv1" ControlToValidate="Name"
 Text="*" InitialValue=" Your Name " Display="Dynamic" runat="server" />

No entanto, há um problema com essa abordagem: se o cliente desabilitar o JavaScript, o campo de texto não será preenchido previamente com o texto da marca d'água, portanto, o RequiredFieldValidator não disparará uma mensagem de erro. Portanto, é necessário um segundo RequiredFieldValidator controle que verifica se há uma caixa de texto vazia (omitindo o InitialValue atributo).

<asp:RequiredFieldValidator ID="rfv2" ControlToValidate="Name"
 Text="*" Display="Dynamic" runat="server" />

Como ambos os validadores usam Display="Dynamic", o usuário final não pode distinguir da aparência visual em que os dois validadores foram acionados; em vez disso, parece que havia apenas um deles.

Por fim, adicione algum código do lado do servidor para gerar o texto no campo se nenhum validador tiver emitido uma mensagem de erro:

<script runat="server">
 protected void btn_Click(object sender, EventArgs e)
 {
 lbl.Text = HttpUtility.HtmlEncode(Name.Text);
 }
</script>

O validador reclama que não há texto no campo

O validador reclama que não há texto no campo (Clique para exibir a imagem em tamanho real)