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 に答える