Blazor how to pass arguments to onclick function?
C#BlazorC# Problem Overview
I'd want to make button onclick
function that takes some input.
<button onclick="@test(123, 456)">Check</button>
@functions
{
public void test(int a, int b)
{
Console.WriteLine(a + b);
}
}
But for some reason it throws an error:
Argument "1": Cannot convert from void to string
Later I'd want to create those buttons in for loop like
@for (int i = 0; i < 10; i++)
{
<button onclick="@test(i, 5 * i)">Check</button>
}
How can I achieve that?
C# Solutions
Solution 1 - C#
Try it with a lambda. You're binding the onclick
to the result of the function rather than the function itself.
@for (int i = 0; i < 10; i++)
{
var buttonNumber = i;
<button @onclick="@(e => test(buttonNumber, 5 * buttonNumber))">Check</button>
}
Solution 2 - C#
I try this and worked
@onclick="(() => FunctionName(argument))"
like
@onclick="(() => GetDetail(item.UserId))"
Got idea from https://github.com/aspnet/AspNetCore/issues/15956 .
Solution 3 - C#
At Sign on onclick
specifies it's a C# function:
@onclick = "@(() => test(i, 5*i))"
Solution 4 - C#
<input type="button" @onclick="@(() => functionname(paramvalue))" class="....." value="DoSomething" />
Solution 5 - C#
The following both input as well as button typed worked for me.
<td>
<input type="button" class="btn btn-primary" value="Delete"
@onclick="(() => this.DeleteTodoItem(todoItem.Id))" />
</td>
<td>
<button class="btn btn-primary"
@onclick="(() => this.DeleteTodoItem(todoItem.Id))">Delete</button>
</td>