[英]How to use FormHelper and FluentValidation in .netcore 6 razor pages
我正在从 mvc 转移到 razor 页面,但似乎无法使用流利的验证器和 FormHelper 进行验证。
通常使用 mvc 模式
[FormValidator]
Public async Task<IActionResult> submitFormAction()
{
// do something
return View();
}
带Razor页面
public class AddModel : PageModel
{
public void OnGet()
{
}
[FormValidator] // *'FormValidator' cannot be applied to razor page handler method it may be applied to either Razor page model or applied globally*
public async Task OnPostAsync()
{
}
}
您是否查看过以下 package 以将 FluentValidation 集成到 ASP.NET 核心应用程序中?
我相信这将包括必要的扩展方法,以允许您将 FluentValidation 注册为您想要用于执行验证的服务。
您可以使用此 git 问题:
ASP.NET 核心 Razor 页面 - 未调用 PageModel 的验证器,即使正确调用了属性的验证器 #887
https://github.com/FluentValidation/FluentValidation/issues/887
对于其他面临同样问题的人。
问题出在FluentValidation
上,在以前的版本 .netcore 中,您可以通过简单地注册FluentValidation
服务
service.AddFluentValidation(config => config.RegisterValidatorsFromAssemblyContaining<StartUp>());
使用上面的代码,.netcore 使用反射来注册StartUp.cs
程序集中继承AbstractValidator<T>
的所有类
但是对于 .netcore 6,我仍然必须使用上面的代码,但将Startup
替换为Program
,因为 .netcore 6 不使用StartUp.cs
并且仍然必须隐式注册验证服务
builder.Services.AddTransient<IValidator<SomeClass>, SomeClassValidator>();
这对我有用,但我觉得它可以进一步简化,因为如果我正在开发一个大型应用程序并且我有多达 20 个验证器,我的Program.cs
将无法维护
PS:操作方法上的[FormValidator]
已过时,因为使用asp-FormHelper="true"
标记助手是可以的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.