使用 Blazored.fluentValidator 在 Blazor 中使用一个 Editform 验证模型列表

Posted

技术标签:

【中文标题】使用 Blazored.fluentValidator 在 Blazor 中使用一个 Editform 验证模型列表【英文标题】:Validate List of model with one Editform in Blazor with Blazored.fluentValidator 【发布时间】:2021-08-26 10:45:23 【问题描述】:

我有一个扭曲列表的 Editform,我想验证每个模型的每个字段。

我正在使用 Fluentvalidator 和 Blazor。

用例: 所以逻辑是当我点击handlesubmit时,我列表中的所有模型都需要使用fluentvalidator进行验证。 我不明白的是如何制作一个编辑表单,通过一次提交来验证所有模型,Editform 模型只指向一个特定的模型,而不是列表中的模型

这是我的编辑表单:

<EditForm Model="@Model" OnValidSubmit="@HandleSubmitModel">
  <FluentValidationValidator @ref="fluentValidationValidator"/>
  <div class="ModelContainer">
    @foreach (var _model in _Models)
     
      <div class="Model-Item">
        <ModelComponent @key="_Models.IndexOf(_model)" Model="_model" 
                             Remove="RemoveModel"/>
      </div>
       
  </div>
</EditForm>`

这是我的 startup.cs: services.AddTransient&lt;IValidator&lt;Model&gt;, ModelValidator&gt;();

这是我的 ModelValidator.cs:

public class ModelValidator: AbstractValidator<Model>
    
        public ModelValidator()
        
            RuleFor(x => x.RegistrationNumber).NotEmpty();
            RuleFor(x => x.Email).NotEmpty();
            RuleFor(x => x.Capacity).GreaterThan(v => 0);
        
    

【问题讨论】:

【参考方案1】:

为包含列表的外部模型添加一个验证器,然后使用RuleForEach 验证每个内部模型:

public class OuterModel

    public List<Model> Models  get; set; 


public class OuterModelValidator : AbstractValidator<OuterModel>

    public OuterModelValidator()
    
        RuleForEach(r => r.Models).SetValidator(new ModelValidator());
    

【讨论】:

以上是关于使用 Blazored.fluentValidator 在 Blazor 中使用一个 Editform 验证模型列表的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)