IValidatableObject仅在某些操作中

时间:2012-03-12 20:07:28

标签: c# asp.net-mvc-3 ivalidatableobject

我有一个实现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的地方知道的任何方法?

感谢!!!

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果您不想验证某个对象,请不要致电Model.IsValid(或Validate(),如果您明确这样做。在不知道更多细节的情况下,不能回答更多问题关于你的问题。