Pregunta

Tengo una validación completa en una obeject y estoy tratando de averiguar la mejor manera de manejar la situación.

Dada la siguiente clase:

public class LetterResponse {
 public Guid Id {get;set;}
 public bool SendBlankCart {get;set;}
 public string ToName {get;set;}
 public string ToAddress {get;set;}
}

I que desee utilizar un dataannotation y xval con el fin de validar la clase antes de que persisto, pero tengo la validación complejo que requiere más de una propiedad.

Pseudo:

if SendBlankCart {
 - no validation on ToName, ToAddress 
} else {
 ToName - required.
 ToAddress - required. 
}

Me gustaría hacer anotaciones como esto:

[LetterResponseValidator]
public class LetterResponse {
 public Guid Id {get;set;}
 public bool SendBlankCart {get;set;}
 public string ToName {get;set;}
 public string ToAddress {get;set;}
}

y tienen una regla de validación de esta manera:

public class LetterResponseValidator : ValidationAttribute
    {
        public override bool IsValid(object value)
        {
            if (value.GetType() == typeof(LetterResponse))
            {
                var letterResponse = (letterResponse) value;
                if (letterResponse.SendBlankCard)
                {
                    return true;
                } else
                {
                    if (string.IsNullOrEmpty(letterResponse.FromDisplayName) || string.IsNullOrEmpty(letterResponse.ToAddress1))
                    {
                        return false;
                    }
                    return true;
                }

            }
            return false;
        }
    }

Estoy esperando el parámetro a mi instancia de la clase LetterResponse, pero nunca se llama a mi corredor de validación?

¿Alguien sabe una manera de manejar esto?

Gracias,

Hal

¿Fue útil?

Solución

No creo que esto tiene que ver con el hecho de que tiene un validador a nivel de clase. Para excluir cualquier conexión, intente aplicar un validador requiere ficticio para "ToName" y ver si el validador se llama o no.

Si se está llamando, a continuación, que me haga saber, si no es así, entonces usted debe comprobar si se ha anulado su modelbinder de serie con el DataAnnotationsModelBinder en su archivo Global.asax.cs:

ModelBinders.Binders.DefaultBinder = new DataAnnotationsModelBinder();

Para más detalles sobre este proyecto y completamente de trabajo de demostración, lea este Blog artículo sobre la validación del lado del cliente .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top