我正在使用Orc.FluentValidation,我有:
[ValidatorDescription(nameof(Customer), ValidationResultType.Error,
Orc.FluentValidation.ValidationType.BusinessRule)]
public class CustomerBusinessRuleValidator : AbstractValidator<Customer>
{
public CustomerBusinessRuleValidator()
{
RuleFor(x => x.Addresses).Must(x => x != null && x.Count > 0 && x.Any(add => add.IsCurrent))
.WithMessage("Customer object is required to have at least 1 current address.");
}
}
CustomerAddress
public class CustomerAddress : Entity
{
[DomainSignature] public Address Address { get; set; }
[DomainSignature] public Lookup AddressType { get; set; }
[DomainSignature] public bool IsCurrent { get; set; }
}
Customer
public class Customer : Entity
{
[DomainSignature]
public string Code { get; set; }
public Gender Gender { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
public DateTime DateOfBirth { get; set; }
public Lookup PlaceOfBirth { get; set; }
public string PhoneNumber { get; set; }
public string Email { get; set; }
public ICollection<CustomerAddress> Addresses { get; set; }
public Lookup Occupation { get; set; }
public IdDocument Id1 { get; set; }
public IdDocument Id2 { get; set; }
}
在视图中,即使为Customer
添加了带有IsCurrent = true
的CustomerAddress
,消息仍会显示。此外,我不确定为什么一些字段绑定控件显示错误,而另一些控件不显示错误。这不是字段验证规则。
在将CustomerAddress
添加到Addresses
集合之后,是否需要进行类似的方法调用?
i.imgur.com/eecAFuJ.png
请确保在整个集合上引发一个已更改的属性以进行错误验证(例如RaisePropertyChanged(nameof(MyCollection((,否则UI无法更新验证结果。
此外,我不确定为什么某些字段绑定控件显示错误和其他不是这不是字段验证规则。
这可能是,因为您使用的是默认样式。对于大多数控件,Orchestra都会创建一个错误模板(decorator(,但并不是每个控件都有这个模板。上周我们一直在努力添加这些,所以我建议尝试Orchestra&Orc.Controls.
还要确保在绑定上设置ValidateOnDataErrors
和NotifyOnValidationErrors
,以便在UI中显示验证。