我们可以从 Blazor.WASM 中的路由中获取'ambient'值吗?



如标题所述,我试图从blazor中的路由中获取一些值,这应该可用于所有页面。认为"culture-select"或";multi-tenancy"或类似的。

。用/base/{culture}/my/fancy/page/base/{my-tenant}/their/fancy/page我希望{culture}{my-tenant}的内容可以作为<CascadingValue>或可绑定参数。

我可能会使用一个基类或任何东西来解决这个问题,但我希望有一种方法,这将不需要实现自己的路由器或路由解析器来完成这一点。

你可以覆盖MainLayout组件的OnParametersSet方法,捕获RouteValues对象中可用的参数值,并将它们传递给CascadingValue组件的Value属性,以便级联到子组件…

@code
{
private string Culture{ get; set; }
protected override void OnParametersSet()
{
// pull out the "culture" parameter from the route data
object culture = null;
if ((this.Body.Target as 
RouteView)?.RouteData.RouteValues?.TryGetValue("Culture", out 
culture) == true)
{
Culture = culture?.ToString();
}

}
// Note: The first argument to `TryGetValue` is the parameter name
// defined in the in page with the route template 
// `/base/{culture}/my/fancy/page`
// It is not the local `Culture` property we use in MainLayout to pass to 
// the CascadingValue component's Value attribute property, right ;}
}

MainLayout的视图部分可能看起来像这样:

<div class="main">
<div class="top-row px-4">
@Header
</div>
<div class="content px-4">
@Body
</div>
</div>
</div>

您可以使用this而不是Culture来传递对MainLayout的引用,在子组件中将CascadingParameter定义为MainLayout类型,并像这样访问Culture属性:

var culture = MainLayout.Culture; 

注意:在你的例子中,你可以定义一个类来级联{culture} and {my-tenant}

相关内容

  • 没有找到相关文章

最新更新