首页 > 解决方案 > 添加到 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();
            }
        }
    }
}

如果我将字段留空,我会得到:

在此处输入图像描述

如果我输入错误的名称,我只会得到这个:

在此处输入图像描述

标签: blazor

解决方案


只需更换:

messages.Add(editContext.Field(_model.Name), "Name should start with a capital.");

messages.Add(() => _model.Name, "Name should start with a capital.");

然后它应该工作得很好。


推荐阅读