Elshad Shabanov
Elshad Shabanov

Reputation: 603

How to get the current value of the parameter from MainLayout.razor in my ChildPage.razor?

I need to retrieve current value from MainLayout. But I don't know how to refer (or access) to it.

MainLayout.razor

    @inject SomeService SomeService
        
    <-- layout -->
        
    @code
    {
    [Parameter] public string SomeParameter { get; set; };
        
    protected override async Task OnInitializedAsync()
        {
            SomeParameter = SomeService.GetData();
        }
    }

ChildPage.razor

    @page "/childpage"
        
    <-- layout -->
        
    @code
    {
    private string someParameter;
        
    protected override async Task OnInitializedAsync()
        {
            someParameter = ??? (how to get MainLayout.SomeParameter);
        }
    }

P.S. I don't want to get data from SomeService directly in ChildPage.razor, I need a value which is on MainLayout.

Upvotes: 0

Views: 291

Answers (1)

Neil W
Neil W

Reputation: 9162

Use cascading values.

MainLayout.razor

@inject SomeService SomeService

<div>
    <CascadingValue Value=@SomeValue>
        @Body
    </CascadingValue>
</div>

@code {
    string SomeValue;

    protected override async Task OnInitializedAsync()
    {
        SomeValue = SomeService.GetData();
    }
}

ChildPage.Razor

@page "/childpage"

<div>@SomeParameter</div>

@Code {
    [CascadingParameter] public string SomeParameter { get; set; }
}

Upvotes: 1

Related Questions