web-dev-qa-db-ja.com

ドロップダウンを選択したBlazor onchangeイベント

そのため、選択したドロップダウン値が変更されたときに単純なonchangeを起動しようとするのに悩まされてきました。そのようです:

<select class="form-control d-flex" onchange="(dostuff())">
    @foreach (var template in templatestate.templates)
    {
        <option [email protected]>@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イベントがあるからです。

16
Grand Masta1

あなたの答えは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を使用すると、選択時にロジックを実行できます。

4
Patrick Knott

まず、正しいバインド構文を使用していません。

onchange="@dostuff"

@に注意してください

0
Flores

上記の答えは私にはうまくいきませんでした、コンパイルエラーが発生しました。

以下は私の作業コードです。

@inject HttpClient httpClient

@if (States != null)
{

<select id="SearchStateId" name="stateId" @onchange="DoStuff" class="form-control1">
    <option>@InitialText</option>
    @foreach (var state in States)
    {
        <option value="@state.Name">@state.Name</option>
    }
</select>
}


@code {
[Parameter] public string InitialText { get; set; } = "Select State";
private KeyValue[] States;
private string selectedString { get; set; }
protected override async Task OnInitializedAsync()
{
    States = await httpClient.GetJsonAsync<KeyValue[]>("/sample-data/State.json");
}

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

public class KeyValue
{
    public int Id { get; set; }

    public string Name { get; set; }
}
}
0
Pankaj Rawat