Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

nakid.mkt

Validação de Campos

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.