web-dev-qa-db-ja.com

メソッドをコンポーネントに渡す

私は、可能であればどうやって、メインページからBlazorのコンポーネントにメソッドを渡すのかを考えています。

ボタン付きのコンポーネントを含む単純なかみそりのページがあります。かみそりのページからコンポーネントのボタンにonclickメソッドを渡したい

注:voidで問題ないものを返すためにこのメソッドは必要ありません。コンポーネントのボタンでメインページからメソッドを呼び出すことができる必要があるだけです。 Tについて文句を言っていたので、ここでは推測としてintを追加しただけです

ページ

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

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

@code {

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

}

コンポーネントのモデル

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

成分

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


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


@code {


    }

エラー

上記のコードは私に次のエラーを与えます

「btnClick」マッチデリゲート「アクション」のオーバーロードなし

タイプTも試してみましたが、何らかの理由でBlazorがタイプTの参照を見つけることができないため、失敗しました

メモを更新

答えからつながった実例。 PassingMethodToComponent

3
DaImTo

これはうまくいくはずです:

ページ:

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

@code {

    string something = "1";

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

TestingMethodPassingModel:

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

成分:

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

あなたの例(Action<int>):

ページ:

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

@code {

    void btnClick(int arg)
    {

    }
}

TestingMethodPassingModel:

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

成分:

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

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