1

我有一个实现 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),但是当我编辑一个成分时,我只想验证属性(所以我的意思是跳过 IValidatable)任何要知道的方法,在 IValidatable 方法中,我来自哪里调用验证?

谢谢!!!

4

3 回答 3

2

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

于 2012-03-12T20:10:52.397 回答
1

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

于 2012-03-12T20:34:19.957 回答
0

如果您不想验证对象,请不要调用Model.IsValid(或者Validate(),如果您明确地这样做。在不了解有关您的问题的更多详细信息的情况下,无法回答更多。

于 2012-03-12T20:11:24.003 回答