gpt4 book ai didi

c# - 您如何使用 Fluent Validation 对列表中的每个字符串进行验证?

转载 作者:可可西里 更新时间:2023-11-01 07:44:47 25 4
gpt4 key购买 nike

我有一个 MVC3 View 模型定义为:

[Validator(typeof(AccountsValidator))]
public class AccountViewModel
{
public List<string> Accounts { get; set; }
}

使用 FluentValidation (v3.3.1.0) 将验证定义为:

public class AccountsValidator : AbstractValidator<AccountViewModel>
{
public AccountsValidator()
{
RuleFor(x => x.Accounts).SetCollectionValidator(new AccountValidator()); //This won't work
}
}

并且可能会定义帐户验证:

public class AccountValidator : AbstractValidator<string> {
public OrderValidator() {
RuleFor(x => x).NotNull();
//any other validation here
}
}

我希望列表中的每个帐户都按照 documentation 中的描述进行验证.然而,调用 SetCollectionValidator不起作用,因为在使用 List<string> 时这不是一个选项尽管如果它被定义为 List<Account> 选项就会存在.我错过了什么吗?我可以更改模型以使用 List<Account>然后定义一个 Account 类,但我真的不想更改我的模型以适应验证。

作为引用,这是我正在使用的 View :

@model MvcApplication9.Models.AccountViewModel

@using (Html.BeginForm())
{
@*The first account number is a required field.*@
<li>Account number* @Html.EditorFor(m => m.Accounts[0].Account) @Html.ValidationMessageFor(m => m.Accounts[0].Account)</li>

for (int i = 1; i < Model.Accounts.Count; i++)
{
<li>Account number @Html.EditorFor(m => m.Accounts[i].Account) @Html.ValidationMessageFor(m => m.Accounts[i].Account)</li>
}

<input type="submit" value="Add more..." name="add"/>
<input type="submit" value="Continue" name="next"/>
}

最佳答案

以下应该有效:

public class AccountsValidator : AbstractValidator<AccountViewModel>
{
public AccountsValidator()
{
RuleFor(x => x.Accounts).SetCollectionValidator(
new AccountValidator("Accounts")
);
}
}

public class AccountValidator : AbstractValidator<string>
{
public AccountValidator(string collectionName)
{
RuleFor(x => x)
.NotEmpty()
.OverridePropertyName(collectionName);
}
}

关于c# - 您如何使用 Fluent Validation 对列表中的每个字符串进行验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10190316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com