繁体   English   中英

如何在 .netcore 6 razor 页面中使用 FormHelper 和 FluentValidation

[英]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 注册为您想要用于执行验证的服务。

https://github.com/FluentValidation/FluentValidation.AspNetCore#aspnet-core-integration-for-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM