我有一个实现IValidatlableObject的模型,因此通过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" });
}
}
}
}
所以当我创建一个成分我想验证所有(属性+ IValidatable) 但是当我编辑一个Ingrendient时我只想验证属性(所以我的意思是跳过IValidatable) 在IValidatable方法中,从我调用Validate的地方知道的任何方法?
感谢!!!
答案 0 :(得分:2)
检查模型的主键 - 是否为空:)
答案 1 :(得分:1)
这里更“MVCish”的正确方法是你实际上有两个类,一个用于编辑的Create方法。您可以调用基类进行任何共享验证,此处不会检查任何未共享的内容。
答案 2 :(得分:0)
如果您不想验证某个对象,请不要致电Model.IsValid
(或Validate()
,如果您明确这样做。在不知道更多细节的情况下,不能回答更多问题关于你的问题。