c# - 在 Blazor 中验证复杂类型模型中的单个字段
问题描述
我有一个像这样的复杂模型
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()
{
}
}
我想在验证按钮单击时验证单个字段。如果我的模型是非复杂类型,上面的代码可以正常工作。由于这是一种复杂类型,因此上面的代码不起作用。我在这里做错什么了吗?
解决方案
您的问题是您正在尝试验证您从未更新过的字段。在单个字段验证中,它看起来像是ObjectGraphDataAnnotationsValidator
检查该字段是否在 Fields 集合中有一个条目,EditContext
以验证是否发生了某种形式的修改,即试图变得聪明!。如果您想要尝试做的事情,请考虑使用不同的验证器。那里有更好的。搜索Blazor 验证控件。其中一个是 Blazorize 写的,一个是我写的(你可以获取源代码并进行修改)。
推荐阅读
- ietf-netmod-yang - 为什么名称类型的叶节点在 yang 模型中不起作用?
- json - 如何将lua表对象解析为json?
- html - 以浮动外框为中心定位模态
- javascript - RXJS 去抖动和修改 BehaviourSubject
- javascript - 如何在 Javascript 中从 http 源返回图像
- supervisord - 错误:.ini 文件不包括 UBUNTU 中的 supervisorctl 部分
- java - 在 java android google map 中显示和更新标记的图标
- python-3.x - 使用 LSTM 训练的模型只预测所有相同的值
- reactjs - 如何用 jest 测试反应请求参数?
- python - 你如何在python中使用beautifulsoup从带有“data-reactid”的“span”标签中抓取数据?