Событие Blazor onchange с выпадающим списком выбора

asp.net-core blazor c#

Вопрос

Так что я застрял, пытаясь заставить простой onchange загореться, когда меняется значение выпадающего списка. Вот так:

<select class="form-control d-flex" onchange="(dostuff())">
    @foreach (var template in templatestate.templates)
    {
        <option value=@template.Name>@template.Name</option>
    }
</select>

с вызываемым методом:

void dostuff()
{
   Console.WriteLine("first spot is firing");
    _template = templatestate.templates.FirstOrDefault(x => x.Name == 
    _template.Name);
    Console.WriteLine("second spot is firing");
}

В результате я получаю его независимо от того, как я пытаюсь переориентировать его - это ошибка в браузере.

Uncaught Error: System.ArgumentException: There is no event handler with ID 0

Есть ли что-то очевидное и ключевое, что мне не хватает? Потому что у меня есть кнопка onclick, которая отлично работает на той же странице.

Принятый ответ

Ваш ответ должен быть в cshtml:

<select onchange=@DoStuff>
    @foreach (var template in templates)
    {
        <option value=@template>@template</option>
    }
</select>

Тогда ваши @функции должны выглядеть так:

@functions {
    List<string> templates = new List<string>() { "Maui", "Hawaii", "Niihau", "Kauai", "Kahoolawe" };
    string selectedString = "Maui";

    void DoStuff(UIChangeEventArgs e)
    {
        selectedString = e.Value.ToString();
        Console.WriteLine("It is definitely: " + selectedString);
    }
}

Вы также можете использовать привязку ...

<select bind="@selectedString"> 

но onchange = @ DoStuff позволяет вам выполнять логику выбора.


Популярные ответы

Для начала вы не используете правильный синтаксис связывания:

onchange="@dostuff"

обратите внимание на @



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему