So I have been stuck trying to get a simple onchange to fire when a select dropdown value changes. Like so:
<select class="form-control d-flex" onchange="(dostuff())">
@foreach (var template in templatestate.templates)
{
<option [email protected]>@template.Name</option>
}
</select>
with the method being called:
void dostuff()
{
Console.WriteLine("first spot is firing");
_template = templatestate.templates.FirstOrDefault(x => x.Name ==
_template.Name);
Console.WriteLine("second spot is firing");
}
The result I get it no matter how I try to reorient it is this error in the browser.
Uncaught Error: System.ArgumentException: There is no event handler with ID 0
Is there something obvious and key that I am missing? Because I have a button onclick event that works just fine in the same page.
Your answer should be in the cshtml:
<select onchange=@DoStuff>
@foreach (var template in templates)
{
<option value=@template>@template</option>
}
</select>
Then your @functions (in razor components @code instead. See: https://docs.microsoft.com/vi-vn/aspnet/core/mvc/views/razor?view=aspnetcore-3.0#functions) should look like:
@functions {
List<string> templates = new List<string>() { "Maui", "Hawaii", "Niihau", "Kauai", "Kahoolawe" };
string selectedString = "Maui";
void DoStuff(ChangeEventArgs e)
{
selectedString = e.Value.ToString();
Console.WriteLine("It is definitely: " + selectedString);
}
}
You could also just use a bind...
<select bind="@selectedString">
but onchange=:@DoStuff allows you to perform logic on selection.
Note that in Preview 6, it appears that syntax will be @onchange="@DoStuff" with the future promising @onchange="DoStuff". Here's a link to some changes: Blazor Preview 6