IValidatableObject仅在某些操作中

本文关键字:操作 IValidatableObject | 更新日期: 2023-09-27 18:27:38

我有一个实现IValidatableObject的模型,因此通过Validate方法自定义错误检查。

当我创建一个对象时,一切都很好,但当我试图编辑该对象时,我不想进行自定义验证。

我怎么能从我调用Validate方法的操作中知道不进行验证?

更新时间:这是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" });
        }

    }
}

}

因此,当我创建一种成分时,我想验证ALL(属性+IValidable)但当我编辑Ingendient时,我只想验证属性(所以我的意思是跳过IValidatable)在IValidatable方法中,有什么方法可以知道我从哪里调用Validate?

谢谢!!!

IValidatableObject仅在某些操作中

检查模型主键是否为空:)

这里更"MVCish"的正确方法是实际上有两个类,一个用于Create方法,另一个用于编辑。您可以调用基类进行任何共享验证,任何未共享的内容都不会在此处进行检查。

如果您不想验证对象,请不要调用Model.IsValid(或Validate(),如果您是显式调用的话)。如果不了解有关问题的更多详细信息,就无法回答更多问题。