[SOLUCIONADO] problemas con un CustomValidator no envia el mensaje

Iniciado por jorgexl30, 19 Octubre 2009, 23:01 PM

0 Miembros y 2 Visitantes están viendo este tema.

jorgexl30

hola bueno esta es mi tercera publicacion espero me puedan ayudar
resulta que tengo un CustomValidator  para validar  nu,ero de cuotas  segun la fecha le hago un seguimiento a la validacion y lohace bien pero no envia el mensaje de error al control tampoco parta  el submit de la pagina de antemano muchas gracias  (tengo dos controles de error el CustomValidator es el que me da problemas )
en el formulario tengo esto
<td  align="left" style="width: 358px; height: 2px;">
               <asp:DropDownList ID="Cuotas" AutoPostBack="true" runat="server"  >
                     <asp:ListItem Text="Cuotas" Selected="True" />
                     <asp:ListItem Text="1" Value="1" />
                     <asp:ListItem Text="2" Value="2" />
                     <asp:ListItem Text="3" Value="3" />
                     <asp:ListItem Text="4" Value="4" />
                     <asp:ListItem Text="5" Value="5" />
                 
                     </asp:DropDownList>
       <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" BackColor="White"
           ControlToValidate="Cuotas" ErrorMessage="Ingrese N°Cuotas...!" Width="91px"></asp:RequiredFieldValidator>
           </td>
      <td align="left" style="width: 358px; height: 2px">
          <asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="Cuotas"
           OnServerValidate="CustomValidator1_ServerValidate"
              ErrorMessage="La Cuota no es valida ...!" Width="259px" BackColor="White" Font-Size="Medium"></asp:CustomValidator></td>
           </tr>
y el codigo es este




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

       Dim fechaAux As Date
       Dim dias As String
       Dim ano As String
       numerocuota = Me.Cuotas.SelectedValue

       ano = Date.Now.Year


       If Semestre.Text = "1" Then
           Select Case numerocuota
               Case "5"
                   fechaAux = Format("dd/MM/yyyy", "05/04/" & ano)
                   dias = DateDiff(("d"), fechaAux, Date.Now)

                   If dias > 0 Then



                       args.IsValid = False

                   Else

                       args.IsValid = True



                   End If

               Case "4"
                   fechaAux = Format("dd/MM/yyyy", "05/05/" & ano)
                   dias = DateDiff(("d"), fechaAux, Date.Now)
                   If dias > 0 Then
                       args.IsValid = False
                   Else
                       args.IsValid = True
                   End If

               Case "3"
                   fechaAux = Format("dd/MM/yyyy", "05/06/" & ano)
                   dias = DateDiff(("d"), fechaAux, Date.Now)
                   If dias > 0 Then
                       args.IsValid = False

                   Else
                       args.IsValid = True
                   End If

               Case "2"

                   fechaAux = Format("dd/MM/yyyy", "05/07/" & ano)
                   dias = DateDiff(("d"), fechaAux, Date.Now)
                   If dias > 0 Then
                       args.IsValid = False

                   Else
                       args.IsValid = True
                   End If

               Case "1"
                   fechaAux = Format("dd/MM/yyyy", "05/08/" & ano)
                   dias = DateDiff(("d"), fechaAux, Date.Now)
                   If dias > 0 Then
                       args.IsValid = False
                   Else
                       args.IsValid = True
                   End If

           End Select
       End If
       If Semestre.Text = "2" Then
           Select Case numerocuota

               Case "5"
                   fechaAux = Format("dd/MM/yyyy", "05/09/" & ano)
                   dias = DateDiff(("d"), fechaAux, Date.Now)
                   If dias > 0 Then

                       args.IsValid = False
                   Else
                       args.IsValid = True
                   End If
               Case "4"
                   fechaAux = Format("dd/MM/yyyy", "05/10/" & ano)
                   dias = DateDiff(("d"), fechaAux, Date.Now)
                   If dias > 0 Then
                       args.IsValid = False
                   Else
                       args.IsValid = True
                   End If
               Case "3"
                   fechaAux = Format("dd/MM/yyyy", "05/11/" & ano)
                   dias = DateDiff(("d"), fechaAux, Date.Now)
                   If dias > 0 Then
                       Response.Write("1")
                       args.IsValid = False
                   Else
                       args.IsValid = True
                       Response.Write("2")
                   End If
                   Response.End()
               Case "2"
                   fechaAux = Format("dd/MM/yyyy", "05/12/" & ano)
                   dias = DateDiff(("d"), fechaAux, Date.Now)
                   If dias > 0 Then
                       args.IsValid = False
                   Else
                       Modulo.Text = dias
                   End If
               Case "1"
                   ano = Convert.ToInt16(ano)
                   ano = ano + 1
                   fechaAux = Format("dd/MM/yyyy", "05/01/" & ano)
                   dias = DateDiff(("d"), fechaAux, Date.Now)
                   If dias > 0 Then
                       args.IsValid = False
                   Else
                       args.IsValid = True
                   End If

           End Select
       End If
   End Sub :(

MANULOMM

Asegurate de que la propiedad display sea igual a static o dynamic.

Recuerda que para detener el postback debes preguntar si es valido en el evento que lanza el postback.
Código (csharp) [Seleccionar]


protected void btn_Click(object sender, EventArgs e)
{
     if(this.IsValid)
     {
        //Logica normal.
     }
}

protected void val_ServerValidate(object source, ServerValidateEventArgs args)
{
     //validacion
    args.IsValid = false;
}


si no haces esto la validación aunque sea falsa (args.IsValid) continuara la ejecución, debería mostrarte el mensaje pero continuara con la ejecución de código normalmente.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia


MANULOMM

algo adicional, si tienes la propiedad ControlToValidate del custom validator con algun control, asegurate de poner la propiedad

ValidateEmptyText="True"

para que se lance la validacion siempre ;) ;).

Atentamente,

Juan Manuel Lombana
Medellín - Colombia


jorgexl30


jorgexl30

juan unaconsulta el autopostabak debe ir en true o false para el dropnlist
jorge

MANULOMM

ps se supone que en true, pero he visto que cuando se lanza el postback por un DropDownList el validador no se lanza, yo le que hago normalemente es que pongo el autopostback en false y agrego un boton sin codigo que diga aceptar al lado del DropDown, el boton cuando se presione lanzara el custom validator, pero el boton no debe llevar nada de codigo ps el objetivo es que solo haga el postback.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia


Hadess_inf

Si se hace el postback ya no habria necesidad de validar puesto que ya se sobre entiende que se selecciono algun item. xD

MANULOMM

pero segun vi en la logica no solo depende del item, por ser un custom validator valida la fecha contra el item o algo asi, si fuese un RequeridFieldValidator si, pero aqui hay una logica asociada al objeto, a algunas veces no se me lanza con el PostBack que hace el dropdownlist.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia


jorgexl30

hola gracias lo solucione me faltaba el
            if   IsValid then
                 
                  end if

muy bueno el foro e solucionado varios problemas como soy nuevo en asp.net
no lo domino mucho muchas gracias (poste otro problema que tengo ocn una grilla..)
;-)