Беглая проверка на стороне клиента для уникальной электронной почты - PullRequest
1 голос
/ 07 июня 2019

Я работаю с свободно работающей версией API = 8.0.0.0 и изо всех сил пытаюсь добиться проверки на стороне клиента для уникальной электронной почты.Проверка на стороне клиента работает нормально, но она работает только для имени, фамилии и недействительной электронной почты, но она не работает для уникальной электронной почты, где мне нужно проверить ее из базы данных.Я уже использую ненавязчивый и jquery.

Однако Modelstate возвращает false, если электронная почта не является уникальной.Что я могу сделать, чтобы запустить уникальную клиентскую часть проверки электронной почты?

public class OfferValidator : AbstractValidator<model>
{
  private  ApiService _apiService;
  public   OfferValidator(ApiService apiService)
  {
    _apiService = apiService;

    RuleFor(x => x.FirstName).NotEmpty()
                             .WithMessage("FirstName is required!");
    RuleFor(x => x.LastName).NotEmpty()
                            .WithMessage("LastName is required!");
    RuleFor(s => s.Email).NotEmpty()
                         .WithMessage("Email is required!")
                         .EmailAddress()
                         .WithMessage("Invalid email");
    RuleFor(x => x.Email).Must(IsEmailUnique)
                         .WithMessage("email-Id already exists!");
  }

  public bool IsEmailUnique(string email)
  {
    return this.apiService.GetCustomerByEmail(email) ? false : true;
  }
}  

Я также прошел через this , но я не могу найти "FluentValidationPropertyValidator" в этой версиисвободный API.

Ответы [ 2 ]

1 голос
/ 17 июня 2019

Свободная проверка - это библиотека проверки на стороне сервера. Он поддерживает некоторые основные проверки на стороне клиента. (например, требуется, максимальная длина и т. д.) Вы не можете использовать все правила на стороне клиента на стороне клиента При использовании по умолчанию вам необходимо опубликовать всю страницу для проверки на стороне сервера.

Если вы хотите использовать Fluent Validation на стороне клиента с полной поддержкой, вам нужно написать дополнительные коды для этого. На Nuget есть библиотека для вашей проблемы. Form Helper добавляет полную клиентскую поддержку для Fluent Validation.

Помощник по формам

Вам нужно создать свои формы следующим образом:

var formConfig = new FormConfig(ViewContext)
{
    FormId = "ProductForm",
    FormTitle = "New Product",
    BeforeSubmit = "ProductFormBeforeSubmit", // optional
    Callback = "ProductFormCallback" // optional,
};

// <form id="@formConfig.FormId" asp-controller="Home" asp-action="Save"
// ...

@await Html.RenderFormScript(formConfig)

После этого вам нужно добавить атрибут [FormValidator] к вашему действию.

Теперь вы можете использовать все серверные правила на стороне клиента.

0 голосов
/ 07 июня 2019

Ваше сравнение кажется странным.Попробуйте проверить на null:

public bool IsEmailUnique(string email)
{
    return this._apiService.GetCustomerByEmail(email) != null;
}

Кроме того, если вы спросите меня, это не должно быть задачей проверки (формат данных соответствует правилам?), А скорее правилом бизнес-логики (только продолжайте обрабатывать этоадрес электронной почты, если он уникален).

...