私は、可能であればどうやって、メインページから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
これはうまくいくはずです:
ページ:
<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);
}
}