Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Oi Pessoal,
Sou programador PHP e novado em ASP.NET C#
Para validação de campo texto vi que existe o componente RequiredFieldValidator que realmente é uma mão na roda.
Problema:
Gostaria que a mensagem de erro aparecesse embaico do meu campo texto. Se eu coloco:
<table>
<tr>
<td>
Nome:
</td>
<td>
<asp:TextBox ID="txtNome" runat="server" Width="200px"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvNome" runat="server" ErrorMessage="Campo não pode ser vazio." ControlToValidate="txtNome"></asp:RequiredFieldValidator>
</td>
</tr>
</table>
a mensagem aparece na frente, e se eu crio uma linha a mais como:
<table>
<tr>
<td>
Nome:
</td>
<td>
<asp:TextBox ID="txtNome" runat="server" Width="200px"></asp:TextBox>
</td>
</tr>
<tr>
<td>
</td>
<td>
<asp:RequiredFieldValidator ID="rfvNome" runat="server" ErrorMessage="Campo não pode ser vazio." ControlToValidate="txtNome"></asp:RequiredFieldValidator>
</td>
</tr>
</table>
a ultima <tr> fica vazia quando o formulario o componente não exibe nenhuma mensagem de erro de validação. Gostaria de saber como faço o meio termo desses dois.
Aproveitando: pude perceber que o RequiredFieldValidator faz validação do lado do cliente. Ele é seguro?
Caso eu queira fazer validação do lado do servidor devo usar um componente ou neste caso devo fazer na mão?
Muito obrigado!
Nakid
>
Ele faz a validação dos dois lados. Mesmo que o usuário desabilite a validação javascript ele continua a validar.
E acho melhor você da um **<br />** na frente de seu textbox e logo após adicione seu **required**.
Obrigado pela solução apresentada, mas adicionando <br> cai praticamente no mesmo problema. Agora eu não tenho mais tags vazias, mas fica uma linha em branco a mais no meu formulario por consequencia do <br>. Mesmo quando a mensagem de alerta não está aparente.Eu geralmente faço assim:
<table>
<tr>
<td>
Nome: <asp:RequiredFieldValidator ID="rfvNome" runat="server" ErrorMessage="Campo não pode ser vazio." ControlToValidate="txtNome"></asp:RequiredFieldValidator>
</td>
<td>
<asp:TextBox ID="txtNome" runat="server" Width="200px"></asp:TextBox>
</td>
</tr>
</table>>
Eu geralmente faço assim:
<table>
<tr>
<td>
Nome: <asp:RequiredFieldValidator ID="rfvNome" runat="server" ErrorMessage="Campo não pode ser vazio." ControlToValidate="txtNome"></asp:RequiredFieldValidator>
</td>
<td>
<asp:TextBox ID="txtNome" runat="server" Width="200px"></asp:TextBox>
</td>
</tr>)
</table>
É outra boa solução mas ainda sim estaria me adaptando a um comportamento do modulo, e eu queria que o módulo se ajustasse às minhas necessidades.
No seu modo encontro um outro problema. Se eu precisar colocar dois Validadores, um de campo vazio e eu de expressão regular, por exemplo. Caso o campo for preenchido com algo que nao satisfaça minha expressão regular, a mensagem aparecerá com um grande espaço na frente que seria ocupado pelo texto do "campo vazio".
Resumindo, os validadoes criam <span> e controla isso através do visibility: visible/hidden; enquanto que o ideal seria o controde por display:none;
Cara, você pode fazer suas validações com javascript e colocar "spans" de mensagens de erro dentro de divs ocultas abaixo dos Componentes.
Então, no momento da validação se o campo estiver vazio ou for inválido você mostra a div abaixo do campo, senão ela fica sempre invisível.
Veja no exemplo:
<script type="text/javascript">
function validar() {
var valor = document.getElementById("<%=txtNome.ClientID %>").value;
if (valor == "") {
alert(valor);
document.getElementById("spanValidator").innerHTML = "Campo obrigatório";
document.getElementById("validator").style.display = "block";
return false;
}
else {
alert(valor);
document.getElementById("spanValidator").innerHTML = "";
document.getElementById("validator").style.display = "none";
return true;
}
}
</script>
<table border="1">
<tr>
<td>
Nome:
<asp:TextBox ID="txtNome" runat="server" Width="200px"></asp:TextBox>
<div id="validator" style="display:none;">
<span id="spanValidator"></span>
</div>
</td>
</tr>
</table>
<asp:Button ID="btnSubmit" runat="server" onclick="btnSubmit_Click" Text="Validar" OnClientClick="validar();" />
Talvez isso resolva seu problema, mas é algo nada usual e nem muito funcional.
Talvez fosse melhor você tentar usar o RequiredFieldValidator e apresentar as mensagens de erro dentro do ValidationSummary. Neste caso você pode mostrar ao lado do TextBox que está sendo validado apenas um asterisco e a mensagem de erro no ValidationSummary:
Segue um exemplo:
<asp:ValidationSummary ID="pageValidator" runat="server" Enabled="true" ShowMessageBox="false" ShowSummary="true" />
<table border="1">
<tr>
<td>
Nome:
<asp:TextBox ID="txtNomeAux" runat="server" Width="200px"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvNome" runat="server" ControlToValidate="txtNomeAux" ErrorMessage="Campo Obrigatório" ForeColor="Red" Text="*"></asp:RequiredFieldValidator>
</td>
</tr>
</table>
Eu particularmente prefiro a segunda opção.
Ele faz a validação dos dois lados. Mesmo que o usuário desabilite a validação javascript ele continua a validar.
E acho melhor você da um <br /> na frente de seu textbox e logo após adicione seu required.