2015-01-16 5 views
0

У меня возникла проблема с методом FluentValidation's Must. У меня есть это правило, с моей точки зрения модели:FluentValidation Custom Validation issue

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 неправильно?

Любая помощь приветствуется.

UPDATE:. Так как размещение этого я попробовал несколько других вещей, в том числе только имея метод BeAValidStateCode возвращать ложь, и она по-прежнему проверяет все, что я положил в

+0

Вы делаете проверку против ModelState.IsValid в действии вашего контроллера? –

+0

Да, но я пытаюсь выполнить проверку на стороне клиента. – JB06

ответ

1

FluentValidation не делает на стороне клиента проверки для правил, как Must() без реализации пользовательского клиентского провайдера.

Вообще-то, вы всегда должны иметь проверку на стороне сервера, а клиентская сторона является предпочтительной (поскольку пользователь всегда может отключить Javascript).

Если вы хотите создать собственный поставщик валидации, вы можете получить некоторую идею от this answer или, возможно, this blog post.

+0

Понятно, я не понимал, что, хотя думаю об этом сейчас, я должен был бы. Спасибо за информацию. – JB06