Ren*_*bis 3 asp.net-mvc fluentvalidation fluentvalidation-2.0 asp.net-mvc-5
我有许多表单字段,例如电话号码和邮政编码,可以留空。但是,当它们被填写时,我希望它们符合严格的格式规则。
我希望使用 Fluent Validation 来完成这项任务,但我还没有找到任何可以执行以下操作的方法:
RuleFor(x => x.PhoneNumber)
.Matches(@"^\d{3}-\d{3}-\d{4}$")
.When(x => x.PhoneNumber.Length != 0)
.WithMessage("Phone number must be a valid 10-digit phone number with dashes, in the form of “123-456-7890”")
.Length(12, 12).When(x => x.PhoneNumber.Length >= 1).WithMessage("Phone number must be in the form of “123-456-7890”");
Run Code Online (Sandbox Code Playgroud)
现在这两个都会抛出“未将对象引用设置为对象的实例”。错误。
我是否有任何意义,或者 FluentValidation 甚至不可能做到这一点?
我认为您正在收到“未将对象引用设置为对象的实例”。当PhoneNumber它为空时尝试评估长度属性。首先,您需要检查它是否为空,然后才应用所有其他规则。除了您使用的正则表达式Matches(@"^\d{3}-\d{3}-\d{4}$")已经包含长度验证之外,您可以安全地删除
.Length(12, 12).When(x => x.PhoneNumber.Length >= 1).WithMessage("Phone number must be in the form of “123-456-7890”");
Run Code Online (Sandbox Code Playgroud)
如果您删除长度规则,则应该可以执行以下操作:
When(x => x.PhoneNumber != null,
() => {
RuleFor(x => x.PhoneNumber).Matches(@"^\d{3}-\d{3}-\d{4}$")
.WithMessage("Phone number must be a valid 10-digit phone number with dashes, in the form of “123-456-7890”");
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2194 次 |
| 最近记录: |