首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Blazor与FluentValidation

Blazor与FluentValidation
EN

Stack Overflow用户
提问于 2020-08-16 00:40:50
回答 1查看 1.1K关注 0票数 2

我一直在修改Blazor和FluentValidation作为学习过程,但似乎连"Hello!“都得不到!去工作。

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

没有出现验证消息。我刚刚得到一个可怕的“一个未处理的异常发生了。有关详细信息,请参阅浏览器开发工具。”在页面的那一页上。请帮我把这事做好。

代码语言:javascript
复制
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");
        }
    }
}

Index.razor:

代码语言:javascript
复制
@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!";
    }
}

编辑:我跟踪了这个视频https://www.youtube.com/watch?v=DQxsQu9yg20

开发工具错误:

代码语言:javascript
复制
[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)
EN

回答 1

Stack Overflow用户

发布于 2022-07-06 13:49:10

FluentValidation并没有提供与Blazor的集成,但是有几个第三方库可以用来实现这一点:

我的:

根据错误:

'System.Threading.Tasks.Task`1 FluentValidation.IValidator.ValidateAsync(System.Object,System.MissingMethodException:方法找不到:System.MissingMethodException System.Threading.CancellationToken)‘

我想您是在引用一个与更新的FluentValidation nuget不兼容的旧版本的Blazored.FluentValidation nuget。

当这些依赖项发生严重变化时,就会发生这些错误。在本例中,IValidator.ValidateAsync(System.Object)'已更改为.IValidator.ValidateAsync(System.Object,System.Threading.CancellationToken = default)‘。

作者认为,今后应避免对FluentValidation的此类更改,请参阅https://github.com/FluentValidation/FluentValidation/issues/1915

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63432074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档