簡體   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