web-dev-qa-db-fra.com

Passer la méthode au composant

J'ai essayé de comprendre comment, si possible, et comment passer une méthode de la page principale dans un composant de Blazor.

J'ai une page de rasoir simple, qui contient un composant avec un bouton. Je veux passer la méthode onclick de la page du rasoir au bouton du composant

Remarque: je n'ai pas besoin de cette méthode pour renvoyer tout ce qui est nul. J'ai juste besoin d'appeler une méthode depuis la page principale dans un bouton du composant. J'ai seulement ajouté int ici à titre de supposition car il se plaignait de T

Page

@page "/test"
@using Testing.Client.Model;
@using System.Threading;

<TestMethodPassing ExternalMethod="@btnClick"></TestMethodPassing>

@code {

    public Action<int> btnClick(){ return 1;}

}

Modèle pour composant

public class TestingMethodPassingModel : ComponentBase
{
    [Parameter]
    protected Action<int> ExternalMethod { get; set; }
}

composant

@inherits TestingMethodPassingModel;
@using testing.Client.Model;
@using System.Threading;


<button class="btn btn-primary" @onclick="@ExternalMethod" autofocus>External button</button>


@code {


    }

Les erreurs

Le code ci-dessus me donne l'erreur suivante

Ne me donne pas de surcharge pour le délégué de matchs "btnClick" "Action"

J'ai également essayé de faire le type T et cela a échoué car Blazor ne peut pas pour une raison quelconque trouver la référence pour le type T

Note de mise à jour

Exemple de travail reconstitué à partir des réponses. PassingMethodToComponent

3
DaImTo

Cela devrait fonctionner:

Page:

<TestMethodPassing ExternalMethod="@btnClick"></TestMethodPassing>
<label>@something</label>

@code {

    string something = "1";

    void btnClick()
    {
        something = "11";
    }
}

TestingMethodPassingModel:

[Parameter]
protected Action ExternalMethod { get; set; }

Composant:

<button class="btn btn-primary" @onclick="@ExternalMethod" autofocus>External button</button>

Pour votre exemple (avec Action<int>):

Page:

<TestMethodPassing ExternalMethod="@btnClick"></TestMethodPassing>

@code {

    void btnClick(int arg)
    {

    }
}

TestingMethodPassingModel:

[Parameter]
protected Action<int> ExternalMethod { get; set; }

Composant:

<button class="btn btn-primary" @onclick="@ClickHandler" autofocus>External button</button>

@code {
    void ClickHandler()
    {
        ExternalMethod.Invoke(10);
    }
}
0
SᴇM