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

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

我如何从哪个操作中知道我正在调用 Validate 方法以便不进行验证?

更新:这是我的型号:

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方法中知道的任何方法,呼叫验证?

谢谢!!!

有帮助吗?

解决方案

检查模型的主键 - 无论是n不是null :)

其他提示

在这里的“mvcish”正确的方式越多,您实际上有两个类,一个用于编辑的创建方法。您可以在此处调用到基类以获取任何共享验证,在此处不会检查任何不共享的内容。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top