Question

J'ai un modèle qui mettent en œuvre des IValidatlableObject, et donc la coutume de vérification des erreurs par le biais de Valider la méthode.

Quand je crée un objet que tout va bien, mais lorsque j'essaie de modifier cet objet, je wan pas à faire une validation personnalisée.

Comment puis-je savoir de qui l'action, je vais appeler la méthode de validation afin de ne procéder à la validation?

Mise à JOUR:C'est mon modèle:

public class Ingredient : IValidatableObject
{
    public int Id { get; set; }

    [Required(ErrorMessage = "Required!!")]
    public string Name { get; set; }

    public virtual List<Product> Products { get; set; }

    public Ingredient()
    {
        Products = new List<Product>();
    }

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        using (var uow = new UnitOfWork())
        {
            var ingredient = uow.IngredientRepository.Get(i => i.Name ==Name).FirstOrDefault();

            if (ingredient != null)
                yield return new ValidationResult("Duplicate!!!.", new[] { "Name" });
        }


    }
}

}

Alors, Quand je créer un Ingrédient que je veux valider TOUS (Attributs + IValidatable) mais quand j'ai modifier un Ingrendient je ne veux valider les attributs (donc, je veux dire sauter IValidatable) La méthode, à savoir, à l'intérieur de la IValidatable méthode, de là où je suis d'appeler Valider ?

Merci!!!

Était-ce utile?

La solution

Vérifier la clé primaire du modèle - s'il n'est pas null :)

Autres conseils

La voie la plus correcte "mvcish" ici est que vous avez réellement deux classes, une pour la méthode Créer une méthode pour la modification.Vous pouvez appeler à une classe de base pour toute validation partagée, tout ce qui n'est pas partagé ne serait pas vérifié ici.

Si vous ne voulez pas valider un objet, ne l'appelez pas Model.IsValid (ou Validate(), si vous êtes à le faire explicitement.Ne pouvez pas répondre plus que ça sans connaître plus de détails au sujet de votre problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top