• Viernes 19 de Abril de 2024, 17:24

Autor Tema:  Problema con el Custom Validator  (Leído 2379 veces)

MauriSt0rm

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Problema con el Custom Validator
« en: Lunes 2 de Mayo de 2011, 18:05 »
0
Buenas soy nuevo me presento mi nombre es Mauricio. La cuestión por la cual estoy posteando aca es la siguiente:
Para un trabajo practico para la facultad me piden hacer una pagina ASP.net  con un formulario para cargar datos de un usuario, validar estos datos utilizando los distintos controles de validación ( RequiredField,RegularExpression,Custom) todo iba medianamente bien hasta que me tope con la siguiente consigna:

"Al presionar el Button "Enviar" se debe validar del lado del servidor que el registro sea de
una persona mayor o igual a 21 años, para lo cual se deberá usar un CustomValidator."

el control al cual se valida(el que va en la propiedad ControlToValidate) es un textbox donde se introduce la fecha de nacimiento
con el formato dd/mm/aaaa ( el cual tmb tiene un RegularExpression para validar que esto sea asi), el problema surge al crear la funcion que se va a ejecutar cuando se dispare la validacion custom, como "dd/mm/aaaa" es un string, yo pense en utilizar
la funcion  Substring para obtener el "aaaa" y parsearlo a int y verificar que sea menor o igual a  1989 pero no funciona, no se porque.  Muestro lo que tengo hasta ahora:
Citar

protected void validarEdad(object source, System.Web.UI.WebControls.ServerValidateEventArgs args)
    {
        string año = args.Value.Substring(6);
        int añoN = Int32.Parse(año);
       
        if (añoN <= 1989 )
        {
            args.IsValid = true;
        }
       

    }

esto en la  aspx.cs

y en la .aspx
tengo :
Citar
<asp:CustomValidator
                                ID="cvFechaNac" runat="server" ErrorMessage="CustomValidator" Text="*" ForeColor="#FF3300" ToolTip="Debe tener 21 años o más" ControlToValidate="txtFechaNac"   OnServerValidate="validarEdad" ></asp:CustomValidator>


alguna idea,sugerencia,critica? gracias.

alexg88

  • Miembro activo
  • **
  • Mensajes: 37
    • Ver Perfil
Re: Problema con el Custom Validator
« Respuesta #1 en: Lunes 2 de Mayo de 2011, 22:05 »
0
No dices en que parte no te funciona, así que empezaré por el principio.

¿Has probado a depurar el programa para ver que valores te devuelve args.Value?

Suponiendo que tiene el valor 'dd/mm/aaaa', ¿has tenido en cuenta que el usuario pueda introducir 1/7/2010 ó formateas el resultado para que siempre sea dos caracteres el dia, dos el mes y cuatro el año? Lo mejor realmente sería utilizar una función que te divida la cadena en tres partes teniendo en cuenta que están separadas por /, por ejemplo:

Código: C#
  1.  
  2. string cadena='01/02/2010';
  3. string[] palabras = cadena.Split(new Char [] {' /''});
  4. try{
  5. int año = Int32.Parse(palabras[2]);
  6. }catch(FormatException e)
  7. {
  8.    Console.WriteLine("Error de conversión");
  9.  
  10.  

Otra cosa: no compruebes si alguién tiene una edad suponiendo el año actual, tienes que pensar que el año que viene será un año más y ya no te funcionaría el programa.
 
Si no es eso habría que mirar el código con más detenimiento a ver cual es el problema.
 

MauriSt0rm

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Problema con el Custom Validator
« Respuesta #2 en: Martes 3 de Mayo de 2011, 13:53 »
0
Antes que nada, gracias por responder. Pido disculpas no me di cuenta de especificar el problema.
El inconveniente es que al ingresar una fecha de nacimiento que indique que la persoona todavia no cumplio 21 años, la validacion es correcta de todas formas, es como si siempre se cumpliera la condicion del if que setea args.IsValid a true.
Respecto a tu pregunta sobre el formato, utilizo un RegularExpression validator para que si o si deba introducirse de esa manera la fecha, de lo contrario al presionar el boton enviar se mostrara un asterisco al lado del textbox con un tooltip que da un ejemplo de como se tiene que ingresar.
El textbox de fecha de nac. Tiene 3 validators. RequiredField, Custom y Regular Expression.
Ah y voy a hacer eso de ponert un punto de interrupción para ver que valor esta tomando arg.value
.respecto al método split voy a probarlo a ver que resultado da y luego comento