Сообщения, добавленные в ValidationSummary, отображаются только в ValidationSummary. - PullRequest
1 голос
/ 24 апреля 2020

У меня есть простая форма в компоненте бритвы с одним полем ввода с именем 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();
            }
        }
    }
}

Если я оставлю поле пустым, я получу это:

enter image description here

Если я введу имя неправильно, я получу только это:

enter image description here

1 Ответ

3 голосов
/ 24 апреля 2020

Просто замените:

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

на

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

Тогда все должно работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...