У меня есть приложение 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