89 votes

Blazor comment passer des arguments à la fonction onclick ?

Je voudrais faire du bouton onclick qui prend une entrée.

<button onclick="@test(123, 456)">Check</button>

@functions
{
    public void test(int a, int b)
    {
        Console.WriteLine(a + b);
    }
}

Mais pour une raison quelconque, une erreur s'est produite :

Argument "1": Cannot convert from void to string

Plus tard, je voudrais créer ces boutons dans une boucle for comme

@for (int i = 0; i < 10; i++)
{
    <button onclick="@test(i, 5 * i)">Check</button>
}

Comment puis-je y parvenir ?

1 votes

Il semble que vous ayez besoin d'un type de retour pour votre fonction, essayez de changer void en string.

0 votes

@DalTron J'ai changé void en string et ajouté "return a" - maintenant les boutons onClick s'affichent sur la console. ReferenceError: a is not define et après avoir rafraîchi la page, elle affiche 579 qui est 123+456 Mais pourquoi ?

0 votes

Cela fonctionne-t-il avec un lambda ? @for (int i = 0 ; i < 10 ; i++) { <button onclick="@(e => test(i, 5 * i))">Check</button> }

156voto

bcwhims Points 2177

Essayez-le avec un lambda. Vous liez le onclick au résultat de la fonction plutôt qu'à la fonction elle-même.

@for (int i = 0; i < 10; i++)
{
    var buttonNumber = i;
    <button @onclick="@(e => test(buttonNumber, 5 * buttonNumber))">Check</button>
}

5 votes

Merci et j'ai également trouvé les documents de Blazor utiles à ce sujet. docs.microsoft.com/en-us/aspnet/core/blazor/

1 votes

J'ai essayé mais j'obtiens toujours l'erreur suivante Cannot convert lambda expression to type 'object' because it is not a delegate type

0 votes

Lorsque cela se produit, vous devez créer explicitement l'option EventCallback en utilisant le EventCallback.Factory . Documentation ici : docs.microsoft.com/fr/us/dotnet/api/

49voto

sami ullah Points 446

J'ai essayé ceci et ça a marché

@onclick="(() => FunctionName(argument))"

comme

@onclick="(() => GetDetail(item.UserId))"

J'ai eu l'idée de https://github.com/aspnet/AspNetCore/issues/15956 .

13voto

MrCalico Points 131

À la signature onclick précise que c'est une fonction C# :

@onclick = "@(() => test(i, 5*i))"

0 votes

Même si le code est bon, l'explication n'a aucun sens. Il n'y a pas d'esperluette (&) dans le code.

0 votes

J'ai dit "At" et non "Amper" ;)

1voto

Abbas Hadavandi Points 21
<input type="button" @onclick="@(() => functionname(paramvalue))" class="....." value="DoSomething" />

0voto

VivekDev Points 1821

Ce qui suit a fonctionné pour moi, aussi bien pour les entrées que pour les boutons.

<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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X