我正在使用流畅的API Version = 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,但在此版本的fluent API中找不到“ FluentValidationPropertyValidator”。
答案 0 :(得分:1)
Fluent验证是服务器端验证库。它支持客户端的一些基本验证。 (例如必填项,maxlength等)。您不能在客户端使用所有服务器端规则。在默认用法下,您需要发布所有页面以进行服务器端验证。
如果要在完全支持的客户端上使用Fluent验证,则需要为此编写额外的代码。在Nuget上有一个图书馆可以解决您的问题。表单帮助器将完整的客户端支持添加到Fluent验证中。
您需要这样创建表单:
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] 属性。
现在,您可以在客户端使用所有服务器端规则。
答案 1 :(得分:0)
您的比较似乎很奇怪。尝试检查是否为空:
yourdf=df.loc[:,df.isin(['$', ')', ')%', '%','']).sum()/len(df)<=0.5]
另外,如果您问我,这不应该是验证任务(数据格式是否遵循规则?),而是业务逻辑规则(如果唯一,请继续处理此电子邮件地址)。