xVal, DataAnnotations su tutta la classe
-
20-09-2019 - |
Domanda
Ho una validazione completa su un obeject e sto cercando di capire il modo migliore per gestire la cosa.
Data la seguente classe:
public class LetterResponse {
public Guid Id {get;set;}
public bool SendBlankCart {get;set;}
public string ToName {get;set;}
public string ToAddress {get;set;}
}
voglio usare un dataannotation e xval al fine di convalidare la classe prima che io insisto, ma ho convalida complesso che richiede più di una proprietà.
Pseudo:
if SendBlankCart {
- no validation on ToName, ToAddress
} else {
ToName - required.
ToAddress - required.
}
Vorrei annotare in questo modo:
[LetterResponseValidator]
public class LetterResponse {
public Guid Id {get;set;}
public bool SendBlankCart {get;set;}
public string ToName {get;set;}
public string ToAddress {get;set;}
}
e hanno una regola di convalida in questo modo:
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;
}
}
Mi aspetto il parametro da mia istanza della classe LetterResponse, ma non è mai viene chiamato sul mio corridore convalida?
Qualcuno sa un modo per gestire questa situazione?
Grazie,
Hal
Soluzione
Non credo che questo abbia a che fare con il fatto che si dispone di un validatore a livello di classe. Per escludere qualsiasi connessione, provate ad applicare un manichino validatore richiesto per "ANome" e vedere se il validatore si chiama o no.
Se viene chiamato, poi fatemi sapere, se non lo è, allora si dovrebbe verificare se è stato sovrascritto il vostro modelbinder di serie con il DataAnnotationsModelBinder nel file Global.asax.cs:
ModelBinders.Binders.DefaultBinder = new DataAnnotationsModelBinder();
Per maggiori dettagli su questo e completamente funzionante progetto demo, leggere questo articolo di blog sulla convalida lato client .