【问题标题】:Validate a single field in Complex Type Model in Blazor在 Blazor 中验证复杂类型模型中的单个字段
【发布时间】:2021-09-02 07:22:32
【问题描述】:

我有一个这样的复杂模型

    public class MyModel
     {
       [ValidateComplexType]
       public Student Student { get; set; } = new Student();
     }

   public class Student
     {
      [Required]
      public string Name { get; set; }
      [Required]
      public string Subject { get; set; }
     }

而我的 blazor 代码是这样的

    <EditForm Model="this.Model" OnValidSubmit="Submit" @ref="this.myEditForm">
      <ObjectGraphDataAnnotationsValidator />
        <div class="form-group row">
         <label for="name" class="col-md-2 col-form-label">Name</label>
         <div class="col-md-10">
          <InputText id="name" class="form-control" @bind-Value="this.Model.Student.Name" />
        <ValidationMessage For="@(() => this.Model.Student.Name)" />
    </div>
</div>
<div class="form-group row">
    <label for="supplier" class="col-md-2 col-form-label">Subject</label>
    <div class="col-md-10">
        <InputText id="supplier" class="form-control" @bind-Value="this.Model.Student.Subject" />
        <ValidationMessage For="@(() => this.Model.Student.Subject)" />
    </div>
</div>
<div class="row">
    <div class="col-md-6 text-right">
        <button type="button" class="btn btn-success" @onclick="Validate">Validate</button>
    </div>
    <div class="col-md-6 text-right">
        <button type="submit" class="btn btn-success">Submit</button>
    </div>
</div>
    @code 
      {
private MyModel Model { get; set; } = new MyModel();
private EditForm myEditForm { get; set; }

   private void Validate()
    {    
     this.myEditForm.EditContext.NotifyFieldChanged(
     this.myEditForm.EditContext.Field(nameof(this.Model.Student.Name)));
     }

     private void Submit()
      {

      }
    }

我想在验证按钮单击时验证单个字段。如果我的模型是非复杂类型,上面的代码可以正常工作。由于这是一种复杂类型,因此上面的代码不起作用。我在这里做错了吗?

【问题讨论】:

  • “不工作”是什么意思?有什么例外吗?出乎意料的结果?你的输入数据是什么,你期望什么,你会得到什么?
  • 无论如何:验证为什么要触发 FieldChange 事件?
  • 使用 OnSubmit 控制验证字段
  • @HimBromBeere 我想根据特定字段执行一些操作。所以我必须验证该字段
  • @NicolaBiada 如果我提交,这将验证我的所有字段。我想验证单个字段

标签: c# asp.net-core blazor blazor-validation


【解决方案1】:

您的问题是您正在尝试验证您从未更新过的字段。在单个字段验证中,ObjectGraphDataAnnotationsValidator 似乎正在检查该字段是否在 EditContext 的 Fields 集合中具有条目,以验证是否发生了某种形式的修改,即试图变得聪明!如果您想要尝试做的事情,请考虑使用不同的验证器。那里有更好的。搜索 Blazor 验证控件。其中一个是 Blazorize 写的,一个是我写的(你可以获取源代码并进行修改)。

【讨论】:

    猜你喜欢
    • 2021-01-22
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多