blazor - 添加到 ValidationSummary 的消息仅显示在 ValidationSummary 中
问题描述
我在剃须刀组件中有一个简单的表单,其中有一个名为 Name 的输入字段。如果它为空,则会正确显示错误消息,并使用数据注释完成验证。但我也有一个自定义验证,但这个消息只显示在 中ValidationSummary
,而不是在ValidationMessage
.
我的代码如下所示:
<EditForm EditContext="@_editContext">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="form-group">
<label class="control-label">Name:</label>
<InputText id="countryCode" @bind-Value="_model.Name" class="form-control" />
<ValidationMessage For="@(() => _model.Name)" />
</div>
<button type="submit">Submit</button>
</EditForm>
@code {
class MyModel
{
[System.ComponentModel.DataAnnotations.Required]
public string Name { get; set; }
}
private EditContext _editContext;
private MyModel _model = new MyModel();
protected override void OnInitialized()
{
_editContext = new EditContext(_model);
var messages = new ValidationMessageStore(_editContext);
_editContext.OnFieldChanged +=
(sender, eventArgs) => ValidateFields((EditContext)sender, messages, eventArgs.FieldIdentifier);
}
private void ValidateFields(EditContext editContext, ValidationMessageStore messages, FieldIdentifier field)
{
messages.Clear();
if (field.FieldName == nameof(_model.Name))
{
if(!string.IsNullOrEmpty(_model.Name) && !char.IsUpper(_model.Name[0]))
{
messages.Add(editContext.Field(_model.Name), "Name should start with a capital.");
editContext.NotifyValidationStateChanged();
}
}
}
}
如果我将字段留空,我会得到:
如果我输入错误的名称,我只会得到这个:
解决方案
只需更换:
messages.Add(editContext.Field(_model.Name), "Name should start with a capital.");
和
messages.Add(() => _model.Name, "Name should start with a capital.");
然后它应该工作得很好。
推荐阅读
- ssh - 无法 ssh 登录到 bitbucket.org
- html - 让 HTML 表格“挤压”
- ios - 在 App Store Connect 中更改现有 IAP 自动续订订阅
- bash - 如何防止执行 shell 命令?
- powershell - 需要使用 powershell 将文件中的 \x0d\x0a 替换为 \x2c\x0d\x0a
- javascript - 从一个组件对服务进行ajax调用并从另一个组件访问响应
- android - Android - 获取位置(地理编码器/谷歌播放服务)?
- spring - 如何确定我的 Spring/Quartz 配置使用了多少连接?
- android - 将微调器保存到共享首选项的正确方法
- java - 在 OnCreate 中添加另一个类的数组