【问题标题】:Client side fluent validation for unique email客户端流利验证独特的电子邮件
【发布时间】:2019-10-23 01:03:41
【问题描述】:

我正在使用 fluent API Version=8.0.0.0 并努力实现对唯一电子邮件的客户端验证。客户端验证工作正常,但仅适用于名字、姓氏和无效电子邮件,但不适用于需要从数据库中检查的唯一电子邮件。我已经在使用 unobtrusive 和 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,但是在这个版本的fluent API中找不到“FluentValidationPropertyValidator”。

【问题讨论】:

    标签: .net asp.net-mvc-4 asp.net-mvc-5 fluent fluentvalidation


    【解决方案1】:

    您的比较似乎很奇怪。尝试检查 null:

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

    另外,如果你问我,这不应该是一个验证任务(数据格式是否遵循规则?),而更多的是一个业务逻辑规则(只继续处理这个电子邮件地址,如果它是唯一的)。

    【讨论】:

    • 没有。我的比较是完美的。我得到了我想要的,但客户端验证并没有解决这个问题。但是,如果电子邮件重复,我的模型状态为 false
    • 如果使用条件运算符返回真假,那是有味道的。
    【解决方案2】:

    Fluent Validation 是一个服务器端验证库。它支持客户端的一些基本验证。 (如 required、maxlength 等)您不能在客户端使用所有服务器端规则。默认情况下,您需要发布所有页面以进行服务器端验证。

    如果您想在完全支持的客户端上使用 Fluent Validation,您需要为此编写额外的代码。 Nuget 上有一个库可以解决您的问题。 Form Helper 为 Fluent Validation 添加了完整的客户端支持。

    Form Helper

    您需要像这样创建表单:

    // <form asp-formhelper="true" asp-controller="Home" asp-action="Save" method="post>
    // ...
    

    之后,您需要将 [FormValidator] 属性添加到您的操作中。

    现在您可以在客户端使用所有服务器端规则。

    【讨论】:

    • 这是一个人自己写的很棒的教程(你需要从土耳其语翻译)sinanbozkus.com/…
    猜你喜欢
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 2023-04-05
    相关资源
    最近更新 更多