IValidatableObject только в некоторых действиях - PullRequest
0 голосов
/ 13 марта 2012

У меня есть модель, которая реализует IValidatlableObject, и поэтому пользовательская проверка ошибок с помощью метода Validate.

Когда я создаю объект, все в порядке, но когда я пытаюсь редактировать этот объект, я не хочу выполнять эту пользовательскую проверку.

Как узнать, по какому действию я вызываю метод Validate, чтобы не выполнять проверку?

ОБНОВЛЕНИЕ: Это ми модель:

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


    }
}

}

Итак, когда я создаю Ингредиент, я хочу проверить ВСЕ (Атрибуты + IValidatable) но когда я редактирую Ingrendient, я хочу проверять только атрибуты (я имею в виду пропустить IValidatable) Любой метод, который нужно знать, внутри метода IValidatable, откуда я вызываю Validate?

Спасибо !!!

Ответы [ 3 ]

2 голосов
/ 13 марта 2012

Проверьте первичный ключ модели - не является ли он нулевым:)

1 голос
/ 13 марта 2012

Более корректный путь MVCish - у вас есть два класса: один для метода Create, другой для редактирования. Вы можете вызвать базовый класс для любой общей проверки, здесь не будет проверено все, что не было передано.

0 голосов
/ 13 марта 2012

Если вы не хотите проверять объект, не вызывайте Model.IsValid (или Validate(), если вы делаете это явно. Не можете ответить больше, не зная больше деталей о вашей проблеме.

...