如何使用Fluent validation for.Net core应用客户端验证



.Net Core 3.0 MVC视图。需要应用-以下型号的客户端验证。

尝试如下:

型号:个人

public class Person {
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public int Age { get; set; }
}

验证规则:

public class PersonValidator : AbstractValidator<Person> {
public PersonValidator() {
RuleFor(x => x.Id).NotNull().NotEmpty();
RuleFor(x => x.Name).Length(0, 10);
RuleFor(x => x.Email).EmailAddress();
RuleFor(x => x.Age).InclusiveBetween(18, 60);
}
}

在后面的文档中,它显示了"validator"属性,但我在命名空间中找不到。

https://docs.fluentvalidation.net/en/latest/mvc5.html

解决方案1:使用AddFluentValidationClientsideAdapters

您可以使用FluentValidation.AspNetCore并通过添加来注册客户端验证

services.AddFluentValidationClientsideAdapters();

解决方案2:使用FormHelper

您也可以使用FormHelper,而不是使用客户端验证,您可以通过AJAX执行完整的服务器端规则

详细信息

FluentValidation GitHub自述:

客户端验证

FluentValidation是一个服务器库,不提供任何直接进行客户端验证。但是,它可以提供元数据其可以应用于生成的HTML元素,以便与客户端框架(如jQuery(以与ASP.NET的默认验证属性有效。

请注意,并非FluentValidation中定义的所有规则都适用ASP.NET的客户端验证。例如,使用定义的任何规则条件(带有When/Un除非(、自定义验证器或对Must的调用不会在客户端运行。RuleSet中的任何规则也不会(尽管这是可以更改的-请参阅下文(。以下验证器在客户端上受支持:

  • NotNull/NotEmpty
  • Matches(正则表达式(
  • InclusiveBetween(量程(
  • CreditCard
  • Email
  • EqualTo(跨属性相等比较(
  • MaxLength
  • MinLength
  • Length

要启用客户端集成,您需要安装FluentValidation.AspNetCore包并调用在应用程序启动中添加FluentValidationClientsideAdapters:

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddFluentValidationClientsideAdapters();
services.AddScoped<IValidator<Person>, PersonValidator>();
// etc
}

请注意,AddFluentValidationClientsideAdapters方法仅在FluentValidation 11.1及更新版本中可用。在较旧的版本中,您应该使用AddFluentValidation方法,该方法同时启用自动验证和客户端适配器。如果你只想要客户端适配器,并且不希望在11.0及更早版本中进行自动验证,您可以通过调用services.AddFluentValidation(config => config.AutomaticValidationEnabled = false)对此进行配置

或者,您可以不使用客户端验证相反,使用库通过AJAX执行完整的服务器端规则例如FormHelper。这使您能够充分利用FluentValidation,同时仍然拥有响应迅速的用户体验。

为客户端消息指定规则集

如果您将规则集与ASP.NET MVC一起使用,那么您会注意到默认情况下FluentValidation只会生成客户端错误不属于任何规则集的规则的消息。您可以改为指定FluentValidation应该从通过将控制器操作归因于RuleSetForClientSideMessagesAttribute:

[RuleSetForClientSideMessages("MyRuleset")]
public ActionResult Index(){ return View(new Person()); }

您还可以使用SetRulesetForClientsideMessages扩展方法在您的控制器操作中,这具有相同的影响:

public ActionResult Index()
{   
ControllerContext.SetRulesetForClientsideMessages("MyRuleset");   
return View(new Person());
}

您可以强制使用所有规则来生成客户端错误通过指定一个规则集"*&";。

阅读更多

阅读更多信息:

  • GitHub
  • 文件

能够解决这个问题。

这需要添加到启动文件.AddMvc().AddFluentValidation()

因此,它能够自动选择客户端和服务器端的验证。谢谢

您需要在.AddMvc(或.AddControllersWithViews((之后添加.AddFluentValidation((才能启用Fluent Validation。

Fluent Validation支持一些基本的客户端验证,如required、maxlength等。如果你想在客户端上使用所有服务器端验证,你需要使用FormHelper等第三方库。

Form Helper可以帮助您创建ajax表单和验证,而无需编写任何javascript代码。它将服务器端验证转换为客户端验证。在Startup.cs.上只使用add.AddFormHelper((和.UseFormHelper

FormHelper:https://nuget.org/packages/FormHelper

文件:https://github.com/sinanbozkus/formhelper

最新更新