Blazor onchange event avec liste déroulante select

asp.net-core blazor c#

Question

Donc, je suis coincé en essayant d'obtenir un simple échange pour déclencher quand une valeur de liste déroulante sélectionnée change. Ainsi:

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

avec la méthode appelée:

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

Le résultat que j'obtiens, peu importe comment j'essaie de le réorienter, est cette erreur dans le navigateur.

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

Y a-t-il quelque chose d'évident et de clé qui me manque? Parce que j'ai un événement bouton onclick qui fonctionne très bien dans la même page.

Réponse acceptée

Votre réponse devrait être dans le cshtml:

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

Ensuite, vos fonctions @ devraient ressembler à:

@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);
    }
}

Vous pouvez également simplement utiliser une liaison ...

<select bind="@selectedString"> 

mais onchange = @ DoStuff vous permet d’exécuter une logique de sélection.


Réponse populaire

Pour commencer, vous n'utilisez pas la syntaxe de liaison correcte:

onchange="@dostuff"

remarquez le @



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow