Как использовать FluentValidation для отображения ошибки интерфейса либо для полей - PullRequest
1 голос
/ 14 марта 2012

У меня есть приложение MVC 3, которое использует FluentValidation для выражения логики проверки для некоторых объектов ViewModel.

Один из объектов имеет два свойства:

  [DisplayNameAttribute(UiConstants.Telephone)]
  public string Telephone { get; set; }

  [DisplayNameAttribute(UiConstants.Email)]
  public string Email { get; set; }

Правило состоит в том, что ЛЮБЫЕ из этих свойств должны быть введены в пользовательском интерфейсе, и я хочу, чтобы пользовательский интерфейс отображал сообщение проверки по крайней мере для одного из полей (Электронная почта), когда пользователь нажимает Отправить, но без выполнения PostBack.

Я могу получить валидацию для работы со следующим кодом в валидаторе

               RuleFor(contact => contact.Email)
                .Must((contact, email) => string.IsNullOrWhiteSpace(email) != string.IsNullOrWhiteSpace(contact.Telephone))
                .WithMessage(ValidationConstants.EmailOrTelephone);

, и это отобразит мое сообщение об ошибке проверки в пользовательском интерфейсе, но только после PostBack.

Я также использовал пользовательский валидатор следующим образом

            Custom(contactUs =>
            {
                return string.IsNullOrWhiteSpace(contactUs.Telephone) && string.IsNullOrWhiteSpace(contactUs.Email)
                    ? new ValidationFailure("Email", ValidationConstants.EmailOrTelephone)
                    : null;
            });

но это ведет себя так же.

Разве это не сработает так, как я надеюсь?

Есть ли другой способ сделать валидатор, чтобы сообщение об ошибке отображалось в пользовательском интерфейсе без PostBack?

Я знаю, что мог бы также использовать DataAnnotations, но я специально хочу сделать это с FluentValidation.

Большое спасибо

Brian

1 Ответ

1 голос
/ 16 марта 2012

Вы ищете проверка на стороне клиента - это не относится только к FluentValidation или DataAnnotations. Оба механизма будут работать на стороне сервера автоматически (необходимо подключить FluentValidation, чтобы сделать это автоматически после привязки модели, или запустить его вручную).

Если вам нужна проверка на стороне клиента с ASP.NET MVC, вам также придется подключить этот бит. Эта запись в блоге может помочь.

Одно замечание: ваш пользовательский валидатор не будет работать по умолчанию (вам придется повторить эту валидацию в jQuery на клиенте). Ознакомьтесь с этой статьей о FluentValidation; Вот отрывок, который показывает, какие валидаторы должны «просто работать» на стороне клиента, не переписывая свои собственные:

Обратите внимание, что FluentValidation также будет работать с ASP.NET MVC проверка на стороне клиента, но не все правила поддерживаются. Например, любые правила, определенные с помощью условия (с Когда / Unless), пользовательские валидаторы или вызовы Must не будут выполняться на стороне клиента. на клиенте поддерживаются следующие валидаторы:

* NotNull / NotEmpty

* Совпадения (регулярное выражение)

* включительно между (диапазон)

* CreditCard

* E-mail

* EqualTo (сравнение равенства между свойствами)

* длина

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...