我遇到了FluentValidation&Must方法的问题。我在我的视图模型中有这个规则:
RuleFor(v => v.StateCd).Must(stateCd => BeAValidStateCode(stateCd)).WithMessage("Please enter a valid, 2 character state code.")
.NotEmpty().WithMessage("State is required.")
.Length(2).WithMessage("State should be 2 characters.");
验证方法在视图模型中:
private bool BeAValidStateCode(string stateCode)
{
string states = "|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY|";
return stateCode.Length == 2 && states.IndexOf("|" + stateCode + "|") >= 0;
}
我想确保用户输入的状态代码是两个字符并包含在此字符串中。我已经测试了验证方法并知道它有效,但它验证了输入,如" aa"," jj"等等。我是否错误地使用了Must规则?
感谢任何帮助。
更新:自发布以来,我尝试了其他一些事情,包括让BeAValidStateCode方法返回false,并且它仍然验证我输入的任何内容。
答案 0 :(得分:1)
如果没有实现自定义客户端提供程序,FluentValidation不会对Must()等规则进行客户端验证。
一般来说,您应始终进行服务器端验证,客户端是欢迎选项(因为用户始终可以禁用Javascript)。
如果您想构建自定义验证提供程序,可以从this answer或this blog post获得一些想法。