Domanda

Ho un modello che implementa italidatLableObject e quindi il controllo degli errori personalizzati tramite il metodo validato.

Quando creo un oggetto tutto va bene, ma quando provo a modificare quell'oggetto, non voglio fare quella convalida personalizzata.

Come posso sapere da Wich Action che sto chiamando il metodo valido per non fare la convalida?

Aggiornato: Questo è il modello MI:

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" });
        }


    }
}
.

}

Quindi quando creo un ingrediente voglio convalidare tutti (attributi + ivalidabile) Ma quando modifico un ingrendiente voglio solo convalidare gli attributi (quindi intendo saltare ivalidabile) Qualsiasi metodo da sapere, all'interno del metodo Ivalidabile, da dove sto chiamando convalida?

Grazie !!!

È stato utile?

Soluzione

Controllare la chiave primaria del modello - se non è nullo :)

Altri suggerimenti

Più "MvCish" corretto qui è in realtà hai due classi, una per il metodo Crea per la modifica.Puoi chiamare una classe base per qualsiasi convalida condivisa, tutto ciò che non è condiviso non sarebbe stato controllato qui.

Se non si desidera convalidare un oggetto, non chiamare Model.IsValid (o Validate(), se lo stai facendo esplicitamente. Non può rispondere più di quello senza sapere maggiori dettagli sul tuo problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top