Событие обмена данными Blazor не происходит - PullRequest
1 голос
/ 30 января 2020

Я реализовал onchange в списке данных в моем компоненте .razor на моем сервере Blazor /. NET Core 3.1. application.

В браузере, когда я выбираю опцию из списка данных, метод OnChanged не запускается. Моя точка останова в OnChanged - это , а не , ударил.

Я хочу, чтобы она сработала, а затем используйте OnChanged для заполнения <select name="EventsInType">

, который я добавил <button элемент на странице с @onclick="OnClicked" в качестве примера чего-то, что работает - это срабатывает, и моя точка останова в OnClicked поражена.

  • Я попробовал ответ как предложено здесь , но это не работает.
  • Кроме того, когда я меняю синтаксис с @onchange="OnChanged" на onchange="@OnChanged", я получаю следующее:

Не могу преобразовать группу методов «OnChanged» в тип без объекта «объект». Вы намеревались вызвать метод?

Я бы подумал, что это должно быть достаточно просто с Blazor, есть что-то, чего я здесь не понимаю?

Вот код:

@page "/"
@inherits EventDetailsBase
Event Type
<input autoComplete="on" list="EventTypes" placeholder="Search event types..." />
<datalist @onchange="OnChanged" id="EventTypes">
    @foreach (var eventType in EventTypes)
    {
        <option value="@eventType.Name">@eventType.Name</option>
    }
</datalist>

<select name="EventsInType">

</select>

<button class="btn btn-primary" @onclick="OnClicked">
    Click Me
</button>

@code {
    private void OnClicked(MouseEventArgs e)
    {
        var test = "";
    }

    private void OnChanged(ChangeEventArgs args)
    {
        //POPULATE HTML SELECT "EventsInType" HERE
    }
}

Базовый класс, вероятно, не имеет значения, но здесь это так или иначе:

    public class EventDetailsBase : ComponentBase
    {
        [Inject]
        public IMyService MyService { get; set; }
        public List<EventType> EventTypes { get; set; } = new List<EventType>();

        protected override async Task OnInitializedAsync()
        {
            EventTypes = await MyService.GetEventTypes();

        }

        public void GetEventsByType(ChangeEventArgs changeEventArgs)
        {
            var test = changeEventArgs;
        }
    }

** Обратите внимание, я для простоты вставляю OnClicked и OnChanged в компонент .razor @code, в конце концов я перейду к Базовый класс.

1 Ответ

1 голос
/ 30 января 2020

Я думаю, что это должно быть так:

<input @onchange="OnChanged" autoComplete="on" list="EventTypes" placeholder="Search event types..." />
<datalist id="EventTypes">
    @foreach (var eventType in EventTypes)
    {
        <option value="@eventType.Name">@eventType.Name</option>
    }
</datalist>

Вы также можете использовать эту форму привязки для элемента ввода: @ bind = "eventType.Name" вместо события change. Обратите внимание, что использование события изменения не приводит к двустороннему связыванию ...

...