none
Validaciones personalizadas en Silverlight con RIA Services RRS feed

  • Pregunta

  • Help me please!!!

    siguiendo un tutorial de MSDN, hice una Validación Personalizada, muy sencilla a modo de prueba, solo verifico que uno de los campos de una tabla (Frecuencia) sea mayor que 0, y cuando en una pantalla trato de modificar un registro de esa tabla, y pongo un 0 en el campo Frecuencia nunca me marca el recuadro rojo indicando el error, sin embargo al momento de Grabar, se sale por el error de que no se pudieron grabar los datos:

    Error de validación en la operación Submit. Examine Entity.ValidationErrors para cada entidad en EntitiesInError para obtener más información.

    mi validación la hice así:

       public class mtto_TipoMantenimientoValidador
        {
            public static ValidationResult IsFrecuenciaValida(mtto_TipoMantenimiento mtto_TipoMantenimientoToValidate, ValidationContext context)
            {
                if (mtto_TipoMantenimientoToValidate.Frecuencia <= 0)
                {
                    return new ValidationResult("Debe proporcionar una Frecuencia mayor a 0");
                }
                else
                {
                    return ValidationResult.Success;
                }
            }
        }
    
        [MetadataTypeAttribute(typeof(mtto_TipoMantenimiento.mtto_TipoMantenimientoMetadata))]
        public partial class mtto_TipoMantenimiento
        {
    
            internal sealed class mtto_TipoMantenimientoMetadata
            {
    
                private mtto_TipoMantenimientoMetadata()
                {
                }
    
                [Required(ErrorMessage = "La Clave del Tipo de Mantenimiento no puede ser nula")]
                [MaxLength(10, ErrorMessage = "La Clave del Tipo de Mantenimiento debe ser de longitud máxima 10")]
                [RegularExpression(@"^[A-Za-z0-9Ññ\s]*$",
                     ErrorMessage = "Solo se permiten letras y números")]
                public string ClaveMtto { get; set; }
    
                public bool Estatus { get; set; }
    
                [Required(ErrorMessage = "Debe indicar la Frecuencia")]
                [RegularExpression(@"^[0-9]*$",
                     ErrorMessage = "Solo se permiten números")]
                [CustomValidation(typeof(mtto_TipoMantenimientoValidador), "IsFrecuenciaValida")]
                public int Frecuencia { get; set; }
    

    yo esperaría que al igual que las otras validaciones (Required, RegularExpression) si no cumple, me salga el mensaje que yo definí aquí, pero no me marca nada en la captura

    todo esto está en el archivo que se autogeneró con RIA Services, en mi proyecto este archivo se llama DomainServiceMTTO.metadata.cs

    alguien sabe qué estoy haciendo mal??? les agradezco mucho cualquier orientación, saludos!!


    cyndyrdz

    jueves, 30 de enero de 2014 16:06

Respuestas

  • Después de mucho buscarle ya lo solucioné, cambié lo siguiente:

    En el shared.cs:

        public static class mtto_TipoMantenimientoValidador
        {
            public static ValidationResult IsFrecuenciaValida(int frecuencia, ValidationContext context)
            {
                if (frecuencia <= 0)
                {
                    return new ValidationResult("Debe Proporcionar una Frecuencia Mayor a 0", new string[] { "Frecuencia" });
                }
                else
                {
                    return ValidationResult.Success;
                }
            }
        }

    En el metadata.cs:

                [CustomValidation(typeof(MTTO.Web.mtto_TipoMantenimientoValidador), "IsFrecuenciaValida")]
                [Required(ErrorMessage = "Debe indicar la Frecuencia")]
                public int Frecuencia { get; set; }
    Y Listo!!!

    cyndyrdz

    jueves, 13 de febrero de 2014 19:13