在我的模型中,似乎Validate()
仅在两个属性都通过验证后被调用。
public class MyModel : IValidatableObject
{
[Required]
public string Name { get; set;}
[Required]
public string Nicknames {get; set;}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if(Nicknames != null && Nicknames.Split(Environment.NewLine.ToCharArray()).Count() < 2)
return yield result new ValidationResult("Enter at least two nicknames, new [] { "Nicknames" });
}
}
当用户在Nicknames
文本区域中输入单行文本但将Name
文本框保留为空时,只会显示Required
属性的Name
错误消息被展示。应从Validate()
函数显示的错误消息永远不会显示。
只有在Name
文本框中输入名称后,Nicknames
文本中的某些文字才会调用Validate()
函数。
它是如何工作的?当在当前页面上引起错误时,在后续页面上向用户显示错误消息似乎很奇怪。
答案 0 :(得分:18)
这是设计的。在所有属性都通过验证之前,对象级验证不会触发,否则对象可能不完整。 Validate方法用于比较一个属性与另一个属性。在您的情况下,您应该编写自定义属性验证器。