【发布时间】:2012-09-07 14:23:52
【问题描述】:
我正在尝试在 MVC 模型中验证此属性,它可以包含零个或多个用逗号分隔的电子邮件地址:
public class DashboardVM
{
public string CurrentAbuseEmails { get; set; }
...
}
问题是如何使用电子邮件地址的内置流利验证规则来做到这一点? 现在我有一个使用 Must 和正则表达式的解决方案,但我觉得它不够优雅。
public DashboardVMValidator()
{
RuleFor(x => x.CurrentAbuseEmails).Must(BeValidDelimitedEmailList).WithMessage("One or more email addresses are not valid.");
}
private bool BeValidDelimitedEmailList(string delimitedEmails)
{
//... match very very long reg. expression
}
到目前为止,包括 RuleFor(...).EmailAddress() 在内的最接近的解决方案是在下面创建一个自定义验证器,并从字符串中对每封电子邮件调用 Validate,但由于某种原因这不起作用(AbuseEmailValidator 无法得到我的谓词 x => x - 在每封电子邮件上调用 validator.Validate 时)。
public class AbuseEmailValidator : AbstractValidator<string>
{
public AbuseEmailValidator()
{
RuleFor(x => x).EmailAddress().WithMessage("Email address is not valid");
}
}
有没有办法以某种简单的方式做到这一点?类似于此解决方案的东西,但使用一个字符串而不是字符串列表,因为我不能使用 SetCollectionValidator(或者我可以吗?):How do you validate against each string in a list using Fluent Validation?
【问题讨论】:
标签: c# asp.net-mvc-3 validation fluentvalidation