Pergunta

Eu tenho um modelo que implementa IValidatlableObject e, portanto, verificação de erros personalizada por meio do método Validate.

Quando crio um objeto, está tudo bem, mas quando tento editar esse objeto, não quero fazer essa validação personalizada.

Como posso saber de qual ação estou chamando o método Validate para não fazer a validação?

ATUALIZADA:Este é o meu modelo:

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


    }
}

}

Então, quando eu crio um ingrediente, quero validar todos (atributos + IVALIDABLE), mas quando edito um ingresso, quero apenas validar atributos (então quero dizer ignorar) qualquer método para saber, dentro do método IValidável, de onde estou chamando validate?

Obrigado!!!

Foi útil?

Solução

Verifique a chave primária do modelo - se não é nula :)

Outras dicas

A maneira mais "MVCish" correta aqui é que você realmente tem duas classes, uma para o método Create e outra para a edição.Você pode chamar uma classe base para qualquer validação compartilhada; qualquer coisa que não seja compartilhada não será verificada aqui.

Se você não quiser validar um objeto, não ligue Model.IsValid (ou Validate(), se você estiver fazendo isso explicitamente.Não posso responder mais do que isso sem saber mais detalhes sobre o seu problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top