我有定义为MVC3视图模型:
[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
}
}
我想作为描述列表中的每个帐户被valdiated 文档 。 然而,调用SetCollectionValidator
不起作用,因为这使用时不是一个选项List<string>
虽然选项会在那里,如果它被定义为List<Account>
。 我缺少的东西吗? 我可以改变我的模型使用List<Account>
,然后定义一个Account类,但我真的不希望改变我的模型,以适应验证。
作为参考,这是我使用的观点:
@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"/>
}