2015-01-16 77 views
0

我遇到了FluentValidation的Must方法问题。我有这个规则我的视图模型:FluentValidation自定义验证问题

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

您是否在控制器操作中对ModelState.IsValid执行检查? –

+0

是的,但我正在尝试使用它进行客户端验证。 – JB06

回答

1

FluentValidation不会做像规则的客户端验证Must()而不实现自定义客户端提供程序。

一般来说,您应该始终进行服务器端验证,客户端是一个可喜的选项(因为用户始终可以禁用Javascript)。

如果你想建立一个自定义验证提供者,你可以从this answer或者this blog post得到一些想法。

+0

我明白了,我没有意识到,虽然现在想着它,但我应该有。谢谢(你的)信息。 – JB06