我有一个ASP.NET MVC应用程序,其中包含一个包含多个字段的表单。其中三个字段组合在一起,只需填写其中一个字段。目前使用IValidatableObject.Validate
方法编写代码:
if (String.IsNullOrEmpty(Field1) && String.IsNullOrEmpty(Field2) && String.IsNullOrEmpty(Field3))
{
yield return new ValidationResult("Please fill in one of the fields.",
new [] { "Field1", "Field2", "Field3" });
}
问题是它在验证摘要中显示"Please fill in one of the fields."
三次,这是不好的。
我看了this post和其他一些基本上建议创建自定义ValidationAttribute
的人。我尝试过这样做,但这种方法存在两个问题。
第一个问题是,如果您只按照上面链接中的建议将ValidationAttribute
应用于一个字段,它只会在验证摘要中放入一条消息,但它也只会突出显示一个红色字段。其他两个领域仍然正常。如果您使用multiple fields have the attribute的方法,那么您将全部以红色显示,但您也会在验证摘要中收到多条错误消息。
另一个问题是当ValidationAttribute
报告错误时,IValidatableObject.Validate
方法不再运行。因此,验证摘要仅包含与ValidationAttribute
相关的错误消息,即使其他问题仍然存在。
所以基本目标是:
IValidatableObject.Validate
必须执行有什么想法吗?