Blazor:从布局访问参数

标签 blazor blazor-server-side

如何从布局访问页面的route参数?

我有一个页面,该页面接受如下所示的route参数:

@page /my-page/{Slug}

在共享布局中渲染标记时,我需要访问Slug的值。

我已经尝试在布局文件中实现OnParametersSet,如下所示,但是未设置该值。仅在页面级别分配。
@inherits LayoutComponentBase

<div class="sidebar">
    <NavMenu />
</div>

<div class="main">
    <div class="top-row px-4">
            @this.Slug   <<<<------ display the parameter
    </div>

    <div class="content px-4">
        @Body
    </div>
</div>

@code
{
    [Parameter]
    public string Slug { get; set; }

    protected override void OnParametersSet()
    {
        // Slug is always null :-/
    }
}

最佳答案

您可以通过CascadingParameters使RouteData对所有组件可用。在您的App.razor中,执行以下操作:

<Router AppAssembly="@typeof(Program).Assembly">
    <Found Context="routeData">
        <CascadingValue Value="@routeData">
            <RouteView RouteData="@routeData" DefaultLayout="@typeof(MyLayout)" />
        </CascadingValue>
    </Found>
</Router>

然后,在需要RouteData的所有组件中,只需添加:
@code
{
    [CascadingParameter]
    RouteData RouteData { get; set; }
}

该值将自动填充。

关于Blazor:从布局访问参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57811557/

相关文章:

c# - 如何在运行时加载 Blazor 页面?

javascript - Blazor fire onchange event when Chosen drop down value changes

blazor - NavigateTo 不立即显示新页面

blazor - .Net Core Blazor - 使用输入复选框与 <tr> onclick 绑定(bind)时出现 Javascript 错误

blazor - StateHasChanged 不在异步调用 Blazor 服务器应用程序上执行

.net - Blazor 应用程序如何能够在不调用 Startup.cs 中的 MapRazorPages() 的情况下公开 Razor Pages 端点?

c# - 无法从输入的模板名称中确定所需的模板 : blazorserverside

blazor - c# blazor 如何将列表传递给页面

c# - 使用 Blazor 设置复选框值而不绑定(bind)

asp.net-core - 为什么 blazor dotnet core 3.1 webassembly 客户端和共享项目是 netstandard 2.1?