64 messaggi dal 16 novembre 2009
Ciao a tutti, ho creato per una classe un attributo custom che funziona durante la validazione

public class UrlNotExist : ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            DatabaseEntities db = new DatabaseEntities();
            var user = db.App.FirstOrDefault(c => c.Url == (string)value);

            if (user == null)
                return ValidationResult.Success;
            else
                return new ValidationResult(Resources.DataLayer.Client.Message.Error.UrlExists);
        }
    }


funziona benissimo, il problema sorge nel momento in cui cerco di aggiornate una proprietà diversa della classe. Mi sono accorto che è questo a generare l'errore dato che commentando l'attributo tutto funziona.

Come posso risolvere questo problema?
Modificato da CristianVr il 17 agosto 2015 11.14 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Cristian,
penso che quando vai ad aggiornare l'entità, la validazione fallisca a causa di questa istruzione:
FirstOrDefault(c => c.Url == (string)value);

Infatti, se sei in aggiornamento anziché in inserimento, il FirstOrDefault ti restituirà sempre un oggetto (l'entità stessa che stai aggiornando) e questo ti darà la falsa illusione che quel valore non possa essere usato.

Nel FirstOrDefault, dovresti aggiungere una ulteriore condizione, cioè che l'ID sia diverso da quello dell'entità attuale. Puoi recuperare l'entità e il suo ID dal ValidationContext.

Ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.