Blazor和FluentValidation

Blazor和FluentValidation,blazor,fluentvalidation,Blazor,Fluentvalidation,我一直在将Blazor和FluentValidation作为一个学习过程进行修补,但似乎连“Hello World!”都没法用 我启动了一个新项目,并通过NuGet添加了Fluent,其中包含一个非常基本的数据类、验证器和索引页面 不显示任何验证消息。我刚刚听到页面底部可怕的“发生了未处理的异常。有关详细信息,请参阅浏览器开发工具”。请帮我把它修好 using FluentValidation; namespace TestFluent.Data { public class Emplo

我一直在将Blazor和FluentValidation作为一个学习过程进行修补,但似乎连“Hello World!”都没法用

我启动了一个新项目,并通过NuGet添加了Fluent,其中包含一个非常基本的数据类、验证器和索引页面

不显示任何验证消息。我刚刚听到页面底部可怕的“发生了未处理的异常。有关详细信息,请参阅浏览器开发工具”。请帮我把它修好

using FluentValidation;
namespace TestFluent.Data
{
    public class Employee
    {
        public string Name { get; set; }
    }

    public class EmployeeValidator:AbstractValidator<Employee>
    {
        public EmployeeValidator()
        {
            RuleFor(n => n.Name).NotEmpty().WithMessage("Please enter a name");
            RuleFor(n => n.Name).MaximumLength(30).WithMessage("Name must be 30 characters or less");
        }
    }
}
使用FluentValidation;
命名空间TestFluent.Data
{
公营雇员
{
公共字符串名称{get;set;}
}
公共类EmployeeValidator:AbstractValidator
{
公共雇员验证器()
{
RuleFor(n=>n.Name).NotEmpty().WithMessage(“请输入名称”);
RuleFor(n=>n.Name).最大长度(30).WithMessage(“名称必须少于30个字符”);
}
}
}
以及索引.razor:

@page "/"
@using TestFluent.Data;

<h3>Header</h3>
<EditForm Model="@emp" OnValidSubmit="@HandleSubmit">
    <FluentValidationValidator />
    <ValidationSummary />
    <div class="form-group">
        <label class="col-form-label">Name:</label>
        <div class="col-md-6">
            <InputText @bind-Value="@emp.Name"></InputText>
            <ValidationMessage For="@(() => emp.Name)" />
        </div>
    </div>
    <button class="btn btn-success" type="submit">Save</button>
    <p><label>@msg</label></p>
</EditForm>

@code {
    string msg = "";
    Employee emp = new Employee();

    void HandleSubmit()
    {
        msg = "Success!";
    }
}
@page/“
@使用TestFluent.Data;
标题
姓名:
拯救
@味精

@代码{ 字符串msg=“”; 员工emp=新员工(); void HandleSubmit() { msg=“成功!”; } }
编辑:我看了这个视频

开发工具错误:

[2020-08-16T01:20:44.379Z] Error: System.MissingMethodException: Method not found: 'System.Threading.Tasks.Task`1<FluentValidation.Results.ValidationResult> FluentValidation.IValidator.ValidateAsync(System.Object, System.Threading.CancellationToken)'.
    
           at Blazored.FluentValidation.EditContextFluentValidationExtensions.ValidateModel(EditContext editContext, ValidationMessageStore messages, IServiceProvider serviceProvider, IValidator validator)

   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)

   at Blazored.FluentValidation.EditContextFluentValidationExtensions.ValidateModel(EditContext editContext, ValidationMessageStore messages, IServiceProvider serviceProvider, IValidator validator)

   at Blazored.FluentValidation.EditContextFluentValidationExtensions.<>c__DisplayClass2_0.<AddFluentValidation>b__0(Object sender, ValidationRequestedEventArgs eventArgs)

   at Microsoft.AspNetCore.Components.Forms.EditContext.Validate()

   at Microsoft.AspNetCore.Components.Forms.EditForm.HandleSubmitAsync()

   at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)

   at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle)
[2020-08-16T01:20:44.379Z]错误:System.MissingMethodException:找不到方法:“System.Threading.Tasks.Task`1 FluentValidation.IValidator.ValidateSync(System.Object,System.Threading.CancellationToken)”。
位于Blazored.FluentValidation.EditContextFluentValidationExtensions.ValidateModel(EditContext EditContext、ValidationMessageStore消息、IServiceProvider服务提供商、IValidator验证器)
在System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine&stateMachine)
位于Blazored.FluentValidation.EditContextFluentValidationExtensions.ValidateModel(EditContext EditContext、ValidationMessageStore消息、IServiceProvider服务提供商、IValidator验证器)
在Blazored.FluentValidation.EditContextFluentValidationExtensions.c__DisplayClass2_0.b__0(对象发送方,ValidationRequestedEventArgs)
在Microsoft.AspNetCore.Components.Forms.EditContext.Validate()中
在Microsoft.AspNetCore.Components.Forms.EditForm.HandleSubmitAsync()中
位于Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(任务)
位于Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle)

请分享它在浏览器开发工具中显示的错误消息。好吧,现在我觉得自己很笨。该项目的.NetStandard版本为2.0,Fluent库不支持该版本。它似乎适用于v2.1。谢谢你的回复。允许您同时使用FluentValidation和内置验证。它还有其他一些不错的功能,比如验证整个对象树,只验证属性的子集(用于向导接口)等等@PeterMorris我想在我的向导屏幕中使用你的库进行流畅的验证,你有一个如何使用它的示例项目吗?bool valid=EditContext.ValidateProperties(EditContext.Field)(name of(SupplierCreateCommand.ApiHook1Url)),EditContext.Field(nameof(SupplierCreateCommand.ApiHook2Url)),EditContext.Field(nameof(SupplierCreateCommand.ApiHook3Url)),EditContext.Field(nameof(SupplierCreateCommand.ApiHook4Url)));请分享它在浏览器开发工具中显示的错误消息。现在我觉得自己很笨。该项目的.NetStandard版本为2.0,Fluent库不支持该版本。它似乎可以与v2.1一起使用。感谢Umair的响应。允许您同时使用FluentValidation和内置验证。它还有其他很好的功能res,例如验证整个对象树,仅验证属性子集(用于向导接口)等@PeterMorris我想在我的向导屏幕中使用您的库进行流畅的验证,您有一个如何使用它的示例项目吗?bool valid=EditContext.ValidateProperties(EditContext.Field)(name of(SupplierCreateCommand.ApiHook1Url)),EditContext.Field(nameof(SupplierCreateCommand.ApiHook2Url)),EditContext.Field(nameof(SupplierCreateCommand.ApiHook3Url)),EditContext.Field(nameof(SupplierCreateCommand.ApiHook4Url));