【发布时间】: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