IValidatableObject 仅在某些操作中
-
12-12-2019 - |
题
我有一个实现 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()
, ,如果你明确地这样做的话。如果不了解有关您问题的更多详细信息,则无法回答更多问题。
不隶属于 StackOverflow