I'm currently trying to call a method from some autogenerated buttons, that are set up from some configuration. So the number of buttons is configurable. I have the blazor page as shown below. My problem is that if I have 3 buttons and I press one then ButtonClicked is called correctly, but the index is always 3 - the end value of int i
for the for
-statement. I of course want the index of the button to be passed to the function. One obvious solution would be to wrap a button in my own component that would then take an index-parameter and this could be passed along to a buttonclicked event, but how can I make the code below work without making my own button component?
@inject Navigator navigator
<div class="chooseDiv">
@for (int i = 0; i < Buttons.Count; i++)
{
<button type="button" class="btn btn-primary btn-lg" style="margin:10px" onclick="@((ui) => ButtonClicked(i))">@Buttons[i]</button>
}
</div>
@functions {
[Parameter] List<string> Buttons { get; set; } = new List<string>() { "You forgot to declare your buttons" };
private void ButtonClicked(int index)
{
Console.WriteLine("Button clicked with index:" + index);
navigator.CurrentResult = index;
navigator.Next();
}
}