ActiveRecord ha un buon sistema per la validazione delle entità. Infatti può essere sufficiente derivare la propria classe entity dalla classe ActiveRecordValidationBase e decorare con l'attributo opportuno una proprietà dell'entità così:
[Property(Column="Percentage", NotNull=true),
ValidateNonZeroPositiveNumber("Immettere un valore nella percentuale")]
public virtual decimal Percentage
{
get { return _percentage; }
set { _percentage = value; }
}
Ovviamente ci sono molti tipi di validatori e comunque è possibile scrivere una propria classe di validazione.
I problemi sorgono se però abbiamo la necessità di tradurre il testo di errore, infatti non è possibile sostituire una funzione alla stringa dell' errore perchè è contenuta in un parametro di un attributo.
Fortunatamente il metodo che si occupa di emettere il messaggio di errore (OnNotValid nella classe ActiveRecordvalidationBase) è dichiarato Override è perciò sufficiente scrivere nella classe relativa alla entiry, o ancora meglio, nella sua classe padre il seguente codice:
protected override void OnNotValid()
{
string[] translatedErrorMessages = new string[ValidationErrorMessages.Length];
for (int i = 0; i < translatedErrorMessages.Length; i++)
translatedErrorMessages[i] = rm.GetString(ValidationErrorMessages[i]);
throw new ValidationException(
rm.GetString("Can't save or update as there is one (or more) field that has not passed the validation test"),
translatedErrorMessages);
}
dove rm è un'instanza del tipo ResourceManager opportunamente settata.
posted @ mercoledì 21 febbraio 2007 19:44