.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
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