XVal, DataAnnotations sobre toda la clase
-
20-09-2019 - |
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
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 .