Jump to content

Archived

This topic is now archived and is closed to further replies.

cintiadel

[Resolvido] validação com validation do visual studio

Recommended Posts

so mais uma coisa....

ele tem qvalidar o controle ANTES dos ifs... ai você coloca o q acontece com o args.IsValid do CUSTOMVALIDATOR se ele for igual a true (valido) . na verdade você pos o cod do custom validator no evento do botão......

 

c não... como q ele vai validar c você já fez exec tudo q tinha q ser depois d o custom testar s é verd ou fals?

outra coisa... você quer q executa o q quando aperta o botão? você não pos nenhum evento para este (web).

Share this post


Link to post
Share on other sites

so mais uma coisa....

ele tem qvalidar o controle ANTES dos ifs... ai você coloca o q acontece com o args.IsValid do CUSTOMVALIDATOR se ele for igual a true (valido) . na verdade você pos o cod do custom validator no evento do botão......

 

c não... como q ele vai validar c você já fez exec tudo q tinha q ser depois d o custom testar s é verd ou fals?

outra coisa... você quer q executa o q quando aperta o botão? você não pos nenhum evento para este (web).

socorroooo....rsrsrs

vamos la denovo...

deixei o meu código assim, pode me ajudar a corrigi-lo?

 

<div>
  <asp:DropDownList ID="DropDownList1" runat="server" Font-Size="X-Small" 
  Heigh="20px">
	 <asp:ListItem Value="0" Selected="True">SELECIONE</asp:ListItem>
	 <asp:ListItem Value="1">SIM</asp:ListItem>
	 <asp:ListItem Value="2">NÃO</asp:ListItem>
 </asp:DropDownList>

  
		<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
			ControlToValidate="DropDownList1" ErrorMessage="RequiredFieldValidator" 
			Display="Dynamic"></asp:RequiredFieldValidator>
  
		<br />
<asp:TextBox ID="TextBox1" runat="server" Enabled="false" BackColor="white"></asp:TextBox>
  
<asp:CustomValidator ID="CustomValidator1" runat="server"></asp:CustomValidator>

		<br />

		<asp:Button ID="Button1" runat="server" Text="Button" OnClick="DropDownList1_SelectedIndexChanged"/>
   </div>

Partial Class _Default
	Inherits System.Web.UI.Page

	Protected Sub Button1_Click(ByVal sender As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles Button1.Click

		Page.Validate()

		If (Page.IsValid) Then

		End If
		Response.Redirect("Obrigada.aspx")
	End Sub

	Protected Sub CustomValidator1_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles CustomValidator1.ServerValidate

		If True Then
			If DropDownList1.SelectedValue = "1" Then
				TextBox1.Enabled = True
				args.IsValid = True
			Else
				TextBox1.Text = String.Empty
				TextBox1.Enabled = False
				CustomValidator1.Text = "Informe 'SIM' para habilitar o text box."
				args.IsValid = False
			End If
		End If
	End Sub

	Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged, Button1.Click

		CustomValidator1.Validate()

	End Sub

End Class

Share this post


Link to post
Share on other sites

olha... não precisa do evento do drop...

pode colocar no evento do botão onde você pos Page.Validate()

 

substituir por

 

CustomValidator1.Validate()

 

você não estacolocando para o controle do botão nenhum evento onclick="nomedoEventodobotão"

e nem pra custom

onServerValidate="nomedoEventoDoCustom"

 

desculpe... não expliquei pq o vento do drop é errado...

- c você manda validar quando o usuário mudar a opção do drop, o botão fica inutilizado não?

- outra coisa... como eu ja disse.... o correto é response.redirect("UrlDaPag", false) se não vai dar exceção, mas você so vai perceber isso (a exceção) se colocar um bloco try catch, entendeu? caso contrário, vai dar exceção e você nem vai saber...

Share this post


Link to post
Share on other sites

agora ele esta indo para a pagina obrigada, mesmo sem eu selecionar nda, e nem preencher, e tbm nao mostra nem requieredfieldvalidator e nem o custom validator.

mas uma vez como ficou o codigo:

 

Partial Class _Default
	Inherits System.Web.UI.Page
	Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
		CustomValidator1.Validate()
		Response.Redirect("Obrigada.aspx", False)
	End Sub

	Protected Sub CustomValidator1_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles CustomValidator1.ServerValidate
		If True Then
			If DropDownList1.SelectedValue = "1" Then
				TextBox1.Enabled = True
				args.IsValid = True
			Else
				TextBox1.Text = String.Empty
				TextBox1.Enabled = False
				CustomValidator1.Text = "Informe 'SIM' para habilitar o text box."
				args.IsValid = False
			End If
		End If
	End Sub
End Class

<asp:DropDownList ID="DropDownList1" runat="server" Font-Size="X-Small" 
  Heigh="20px">
	 <asp:ListItem Value="0" Selected="True">SELECIONE</asp:ListItem>
	 <asp:ListItem Value="1">SIM</asp:ListItem>
	 <asp:ListItem Value="2">NÃO</asp:ListItem>
 </asp:DropDownList>

		<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
			ControlToValidate="DropDownList1" ErrorMessage="RequiredFieldValidator" 
			Display="Dynamic"></asp:RequiredFieldValidator>

<asp:TextBox ID="TextBox1" runat="server" Enabled="false" BackColor="white"></asp:TextBox>

<asp:CustomValidator ID="CustomValidator1" runat="server" OnServerValidate="CustomValidator1_ServerValidate"></asp:CustomValidator>

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click"/>

Share this post


Link to post
Share on other sites

é pq você manda validar mas não manda dar redirect apenas c for verdadeiro.... mas o resto est certo:

 

 

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

CustomValidator1.Validate()

if CustomValidator.IsValid then

Response.Redirect("Obrigada.aspx", False)

End Sub

 

tenta isso e me fala....

 

dica: quando for programar, pelo menos no VisualStudio tem como fazer isso, coloque break points em pontos estrategicos no codigo e mande exec, assim você pode ver como o cod esta sendo exec, isso ajuda bastante

Share this post


Link to post
Share on other sites

é pq você manda validar mas não manda dar redirect apenas c for verdadeiro.... mas o resto est certo:

 

 

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

CustomValidator1.Validate()

if CustomValidator.IsValid then

Response.Redirect("Obrigada.aspx", False)

End Sub

 

tenta isso e me fala....

 

dica: quando for programar, pelo menos no VisualStudio tem como fazer isso, coloque break points em pontos estrategicos no codigo e mande exec, assim você pode ver como o cod esta sendo exec, isso ajuda bastante

só q realmente é pra redirecionar, mas ele tem q obrigar a selecionar uma opção no dropdown

e tbm n aparece em hipotese alguma os validadores q eu coloquei

Share this post


Link to post
Share on other sites

exato.... só vai redirecionar c a pessoa tiver escolhido sim, pq no custom verifica c foi seleciondo a opção sim.... c nõ foi ele retorna false e ai não redireciona

 

so q para os required fild validators q você colocou interferem pq quando eles validam (page.validate()

if page.IsValid)

 

há primeiro uma validação no cliente antes de entrar no evento do botão...ai você não vai conseguir sair do erro caso page.IsValid seja false.... você tem d desabilitar a validação no cliente

 

mas quando

 

 

mas c ele deve escolher 'sim' ou 'não' obrigatoriamente é só você colocar mais uma verificação no custom ué

Share this post


Link to post
Share on other sites

exato.... só vai redirecionar c a pessoa tiver escolhido sim, pq no custom verifica c foi seleciondo a opção sim.... c nõ foi ele retorna false e ai não redireciona

 

 

mas c ele deve escolher 'sim' ou 'não' obrigatoriamente é só você colocar mais uma verificação no custom ué

sabe o q eu reparei ele n ta deixando digitar no combo

Share this post


Link to post
Share on other sites

olha... é uma tela de cadastro com outros campos obrigatorios e no meio disso tem o drop com text box pra validação c estiver tudo certo, passa para a prox pag...

 

eu não to fazendo nada agora.... vou fazer uma pg de cadastro desse jeito e você adequa ai à sua pag...

Share this post


Link to post
Share on other sites

olha... é uma tela de cadastro com outros campos obrigatorios e no meio disso tem o drop com text box pra validação c estiver tudo certo, passa para a prox pag...

 

eu não to fazendo nada agora.... vou fazer uma pg de cadastro desse jeito e você adequa ai à sua pag...

so lembrando q o drop tbm é obrigatorio, se for selecionado sim no dropdown, ele n deve ir pra proxima pagina antes de preencher o textbox, caso contrario ele vai para a proxima pagina

Share this post


Link to post
Share on other sites

<form id="form1" runat="server">
   <asp:ValidationSummary ID="smvErros" runat="server" />
   <table style="border-style: double; border-color: #66FFFF; width: 500px; background-color: #CCFFFF; color: #3366FF;">
       <tr align="center" height="50px">
           <td colspan="2" style="border-color: #66FFFF; border-style: none none double none">
               <asp:Label ID="lblTitulo" runat="server" Text="Cadastro" Font-Bold="True" 
                   Font-Size="25px"></asp:Label>
           </td>
       </tr>
       <tr height="50px">
           <td align="right" style="border-color: #66FFFF; border-style: none double double none">
               <asp:Label ID="lblNome" runat="server" Text="* Nome:" Font-Bold="True"></asp:Label>
                
           </td>
           <td align="left" style="border-color: #66FFFF; border-style: none none double none">
                
               <asp:TextBox ID="txtNome" runat="server"></asp:TextBox>
               <asp:RequiredFieldValidator ID="rfvNome" runat="server" ErrorMessage="Campo Nome é obrigatório"
                   Text="*" Display="None" ControlToValidate="txtNome">*</asp:RequiredFieldValidator>
           </td>
       </tr>
       <tr height="50px">
           <td align="right" class="style1" style="border-color: #66FFFF; border-style: none double double none">
               <asp:Label ID="lblSexo" runat="server" Text="Sexo:" Font-Bold="True"></asp:Label>
                
           </td>
           <td align="left" class="style1" style="border-color: #66FFFF; border-style: none none double none">
                
               <asp:RadioButtonList ID="rblSexo" runat="server" RepeatDirection="Horizontal" 
                   Font-Bold="True">
                   <asp:ListItem Selected="True" Value="0">Feminino</asp:ListItem>
                   <asp:ListItem Value="1">Masculino</asp:ListItem>
               </asp:RadioButtonList>
           </td>
       </tr>
       <tr height="50px">
           <td align="right" style="border-color: #66FFFF; border-style: none double double none">
               <asp:Label ID="lblIdade" runat="server" Text="Idade:" Font-Bold="True"></asp:Label>
                
           </td>
           <td align="left" style="border-color: #66FFFF; border-style: none none double none">
                
               <asp:TextBox ID="txtIdade" runat="server"></asp:TextBox>
           </td>
       </tr>
       <tr height="50px">
           <td align="right" style="border-color: #66FFFF; border-style: none double double none">
               <asp:Label ID="lblNecessidEspecial" runat="server" 
                   Text="* Necessidade Especial:" Font-Bold="True"></asp:Label>
                
           </td>
           <td align="left" style="border-color: #66FFFF; border-style: none none double none">
                
               <asp:DropDownList ID="ddlNecessidEspecial" runat="server" AutoPostBack="True" 
                   ForeColor="#0066FF">
                   <asp:ListItem Selected="True" Value="0">Selecione</asp:ListItem>
                   <asp:ListItem Value="1">Sim</asp:ListItem>
                   <asp:ListItem Value="2">Não</asp:ListItem>
               </asp:DropDownList>
                <asp:CustomValidator ID="cmvNecessidadeEsp" runat="server" 
                   ControlToValidate="ddlNecessidEspecial" 
                   ErrorMessage="Campo Necessidade Especial deve ser selecionado.">*</asp:CustomValidator>
                
               <asp:TextBox ID="txtNecessidEspecial" runat="server" Enabled="False"></asp:TextBox>
               <asp:CustomValidator ID="cmvTipoNescEsp" runat="server" ControlToValidate="txtNecessidEspecial"
                   ErrorMessage="O tipo de necessidade não foi informado." 
                   ValidateEmptyText="True">*</asp:CustomValidator>
           </td>
       </tr>
       <tr height="50px">
           <td colspan="2" align="center">
               <asp:Button ID="btnSalvar" runat="server" Text="Salvar" />
           </td>
       </tr>
   </table>
   </form>

 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
		If Not IsPostBack Then
			LimpaCampos()
		End If
	End Sub

	Protected Sub btnSalvar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSalvar.Click
		Page.Validate()
		cmvTipoNescEsp.Validate()
		If Page.IsValid And cmvTipoNescEsp.IsValid Then
			Response.Redirect("~/Obrigada.aspx", False)
		End If
	End Sub

	Protected Sub ddlNecessidEspecial_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ddlNecessidEspecial.SelectedIndexChanged
		If ddlNecessidEspecial.SelectedValue = "1" Then
			txtNecessidEspecial.Enabled = True
		Else
			txtNecessidEspecial.Text = String.Empty
			txtNecessidEspecial.Enabled = False
		End If
	End Sub

	Protected Sub LimpaCampos()
		txtIdade.Text = String.Empty
		txtNecessidEspecial.Text = String.Empty
		txtNome.Text = String.Empty
		ddlNecessidEspecial.ClearSelection()
		rblSexo.ClearSelection()
	End Sub

	Protected Sub cmvTipoNescEsp_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles cmvTipoNescEsp.ServerValidate
		If ddlNecessidEspecial.SelectedValue = "1" And txtNecessidEspecial.Text = String.Empty Then
			args.IsValid = False
		Else
			args.IsValid = True
		End If
	End Sub

	Protected Sub cmvNecessidadeEsp_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles cmvNecessidadeEsp.ServerValidate
		If ddlNecessidEspecial.SelectedValue = "0" Then
			args.IsValid = False
		Else
			args.IsValid = True
		End If
	End Sub

bom... pelo q eu entendi é isso q você quer....

este exemplo está funcionado... copia e testa antes d colocar no seu prog

Share this post


Link to post
Share on other sites

bom... pelo q eu entendi é isso q você quer....

este exemplo está funcionado... copia e testa antes d colocar no seu prog

primeiro eu gostaria de agradecer pela paciência e pela ajuda.

era isso mesmo que eu precisava, já testei e tá funcionando agora vou aplicar ao meu código, espero que de tudo certo.

muito obrigada por tudo

Share this post


Link to post
Share on other sites

bom... pelo q eu entendi é isso q você quer....

este exemplo está funcionado... copia e testa antes d colocar no seu prog

tire só mais uma dúvida minha quanto essa validação

ao clicar em salvar eu já quero q apareça todos os campos q são requeridos, eu n sei tem haver com o tipo de validação, mas só aparece o do dropdown necessidade e do textbox desc_nec depois que eu preencho todos os outros e dou salvar, ai ele volta e me da o alerta desse campo, já as outras validações da página aparecem mesmo q eu n digite nda e clique em salvar.

Share this post


Link to post
Share on other sites

este é o funcionamento normal dos validators... c você quiser a avlidação simultânea:

- coloque ValidationGroups para os validatores (é uma propriedade dos validators) : coloque o mesmo grupo para todos

- se ainda assim não houver validação simultânea: coloque um grupo para os que são validados mesmo sem o botão salvar e outro para os do ddl. Antes do if que verifica c são validos, onde você manda validar, mande fazer a validação dos dois grupos:

 

page.validate("nomeDoGrupo1")

page.validate("nomeDoGrupo2")

 

- quanto a estar fazendo a verificação no cliente logo q você digita: está exibindo msg? pq o normal é so aparecer um * quando você sai do campo, e quando você aperta o botão salvar, exibir a msg. c já estiver exibindo msg, pode ser q o campo esteja com a propriedade AutoPostBack = true (o Default é false)

 

q bom q você conseguiu resolver o problema...

 

Abraços

Share this post


Link to post
Share on other sites

este é o funcionamento normal dos validators... c você quiser a avlidação simultânea:

- coloque ValidationGroups para os validatores (é uma propriedade dos validators) : coloque o mesmo grupo para todos

- se ainda assim não houver validação simultânea: coloque um grupo para os que são validados mesmo sem o botão salvar e outro para os do ddl. Antes do if que verifica c são validos, onde você manda validar, mande fazer a validação dos dois grupos:

 

page.validate("nomeDoGrupo1")

page.validate("nomeDoGrupo2")

 

- quanto a estar fazendo a verificação no cliente logo q você digita: está exibindo msg? pq o normal é so aparecer um * quando você sai do campo, e quando você aperta o botão salvar, exibir a msg. c já estiver exibindo msg, pode ser q o campo esteja com a propriedade AutoPostBack = true (o Default é false)

 

q bo q você conseguiu resolver o problema...

 

Abraços

para todos os campos aparece normalmentea validação, mas algo estranho ainda esta acontecendo com o CustomValidator, pq ele não aparece se eu n preencher os outros campos, já verifiquei essa a propriedade está como false.

E o campo textbox tah habilitado, mesmo qdo eu seleciono a opção nao.

E está correto como me ensinou:

Protected Sub ddl_necessidades_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddl_necessidades.SelectedIndexChanged
		If ddl_necessidades.SelectedValue = "1" Then
			txt_desc_nec.Enabled = True
		Else
			txt_desc_nec.Text = String.Empty
			txt_desc_nec.Enabled = False
		End If
	End Sub

Share this post


Link to post
Share on other sites

preciso q o evento do select do dropdown seja carregado no load da página e n consigo, ja tentei colocar o codigo a cima no load mas n funciona, sabe como eu posso chamar ele la?

Share this post


Link to post
Share on other sites

olha.. experimenta colocar no ddl, o item 'selecione' como selecionado (padrão) q aí ja começa selecionado (se for isso q você quer) e experimenta colocar a propriedade do textbox que você quer com a propriedade enabled = false.

mas o evento do drop ddl só é ativado quando a pessoa seleciona algo (por isso o tipo de evento é selected index changed)... c você colocar o estdo do textbox como desativado como padrão... ai so vai habilitar quando a pessoa escolher sim....

 

 

quanto ao custom.... existem campos obrigatórios na tela?

Share this post


Link to post
Share on other sites

olha.. experimenta colocar no ddl, o item 'selecione' como selecionado (padrão) q aí ja começa selecionado (se for isso q você quer) e experimenta colocar a propriedade do textbox que você quer com a propriedade enabled = false.

mas o evento do drop ddl só é ativado quando a pessoa seleciona algo (por isso o tipo de evento é selected index changed)... c você colocar o estdo do textbox como desativado como padrão... ai so vai habilitar quando a pessoa escolher sim....

quanto ao custom.... existem campos obrigatórios na tela?

o dropdown já está com essa propriedade :

<asp:ListItem Selected="True" Value="">Selecione</asp:ListItem>

e ele até funciona, mas só quando eu clico no botão e não ao selecionar, como acontece no exemplo que me mandou,

e o código está no evento correto q é o selectedIndexChanged

em relação ao custom, existe sim diversos campos obrigatórios na tela.

Share this post


Link to post
Share on other sites

acho q é pq não adianta so colocar o evento... a propriedade do ddl chamada autoPostBack tem c ser true (padrão é false)....pq so c não so vai ativar com o opt do botão... q ativa (no caso) o selected index changed

Share this post


Link to post
Share on other sites

acho q é pq não adianta so colocar o evento... a propriedade do ddl chamada autoPostBack tem c ser true (padrão é false)....pq so c não so vai ativar com o opt do botão... q ativa (no caso) o selected index changed

eu ja coloquei a propriedade autoPostBack como True e mesmo assim n funciona

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.