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?
谢谢!!!
检查模型主键是否为空:)
这里更"MVCish"的正确方法是实际上有两个类,一个用于Create方法,另一个用于编辑。您可以调用基类进行任何共享验证,任何未共享的内容都不会在此处进行检查。
如果您不想验证对象,请不要调用Model.IsValid
(或Validate()
,如果您是显式调用的话)。如果不了解有关问题的更多详细信息,就无法回答更多问题。