【解決方法】ネストされたコンポーネントからホスト コンポーネントに渡される Blazor パラメーター

プログラミングQA


2 つのネストされたコンポーネント (AlphabeticSearch と ParameterSearch) を持つメイン ページの AreaOfLaw コンポーネントがあります。2 つのネストされたコンポーネントのボタン クリックを使用して、メイン ページ コンポーネントのネストされたコンポーネントからパラメータ プロパティ値が必要です。 以下は、メイン ページのコード、AreaOfLaw.razor、および 2 つのネストされたコンポーネントです。

ネストされたコンポーネントで宣言されたパラメーター プロパティの値で、メイン フォームの検索入力を使用する必要があります。 現在、別のクラスの静的プロパティが機能していますが、それが最善だとは思いません。

前もって感謝します。

私が試したこと:

AreaOfLaw.razor:

HTML
<MudGrid Justify="Justify.Center">
    <AlphabeticSearch AlphabetChanged="OnSearchAlphabet" />
    <ParameterSearch ParameterChanged="OnSearchParameter" />
</MudGrid>

@コード {

private void OnSearchAlphabet()
{
    GetAreaOfLawByAlpahbet();
}

private void OnSearchParameter()
{
    GetAreaOfLawByParameter();
}

private void GetAreaOfLawByAlpahbet()
{
    if(AppProperties.AlphabeticSelection != null)
        AreaOfLaws = Services.AreasOfLaw.ReadByAlphabets.Read(AppProperties.AlphabeticSelection);
}

private void GetAreaOfLawByParameter()
{
    AreaOfLaws = Services.AreasOfLaw.ReadByAny.Read(AppProperties.SearchParameter);
}

}

ネストされたコンポーネント
AlphabeticSearch.razor

<MudItem xs="6">
    <MudCard>
        <MudCardContent>
            <MudText>Search by starting alphabet</MudText>
            <MudSelect @bind-Value="EnumValue" Label="Select an alphabet" AdornmentColor="Color.Secondary">
                @foreach (Alphabets item in Enum.GetValues(typeof(Alphabets)))
                {
                    <MudSelectItem Value="@item">@item</MudSelectItem>
                }
            </MudSelect>
        </MudCardContent>
        <MudCardActions>
            <MudButton Variant="MudBlazor.Variant.Outlined" Color="Color.Secondary" OnClick="OnSearchAlphabet">Search Now</MudButton>
        </MudCardActions>
    </MudCard>

@code {
    public enum Alphabets { A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z };
    private Alphabets EnumValue { get; set; } = Alphabets.A;

    [Parameter]
    public EventCallback<string> AlphabetChanged { get; set; }

    [Parameter]
    public string? SelectedAlphabet { get; set; }

    private void OnSearchAlphabet()
    {
        AppProperties.AlphabeticSelection = EnumValue.ToString(); //--This is a static property. Not good. I want the value SelectedAlphabet on the main page.
        AlphabetChanged.InvokeAsync(SelectedAlphabet = EnumValue.ToString());
    }

}

解決策 1

使用する必要があります CascadingParameter. チェックアウト: ASP.NET Core Blazor カスケード値とパラメーター | マイクロソフト ラーン[^] と Blazor University – カスケード値[^]

コメント

タイトルとURLをコピーしました