0

我有一个 AccountsViewModel 定义为:

[Validator(typeof(AccountsValidator))]
public class AccountsViewModel
{
    public AccountsViewModel()
    {
        Accounts = new List<Account>();
        Accounts.Add(new Account { AccountNumber = string.Empty }); //There must be at least one account
    }

    public List<Account> Accounts { get; set; }
}

我有以下流畅的验证:

public class AccountsValidator : AbstractValidator<AccountsViewModel>
{
    public AccountsValidator()
    {
        //Validate that a single account number has been entered.
        RuleFor(x => x.Accounts[0].AccountNumber)
            .NotEmpty()
            .WithMessage("Please enter an account number.")
            .OverridePropertyName("Accounts[0].AccountNumber");

        RuleFor(x => x.Accounts)
            .SetCollectionValidator(new AccountValidator());
    }
}

public class AccountValidator : AbstractValidator<Account>
{
    public AccountValidator()
    {
        RuleFor(x => x.AccountNumber)
            .Matches(@"^\d{9}a?[0-9X]$")
            .WithMessage("Please enter a valid account number.");

        //TODO: Validate that the account number entered is not a duplicate account
    }
}

Accounts如果帐号在集合中重复,我想添加一个错误。但是,在AccountValidator课堂上我无权访问帐户集合(据我所知)。如何更改/重写此内容以访问帐户集合,以确保帐号不重复?

4

1 回答 1

1

我认为你的方法有点不正确,这就是你努力做到这一点的原因。

您的 AccountValidator 应该用于验证帐户的单个实例。因此,您的“帐号必须是唯一的”规则应在集合级别(即在您的 AccountsValidator 中)实施。在这种情况下,您将可以访问完整的集合,并且可以轻松地断言每个帐号都是唯一的。

AccountsValidator 中当前的“非空”规则也应移至 AccountValidator。

于 2012-12-19T13:05:36.013 回答