asp.net-core - 具有 @Body 和更多属性的 Blazor WASM LayoutComponentBase

标签 asp.net-core razor blazor blazor-client-side

我的用例是我有带有此代码的 MainLayout.razor

@inherits LayoutComponentBase
<header><nav ....></header>
<section><h1>Page Title</h1><section>
<main class="container">
    <div class="row"><div class="col-12">@Body</div></div>
</main>

现在我想设置每个 @Body razor 片段的页面标题(也许通过继承)

@page "/about"
<div>....</div>
@code {
    Title = "About Title";
}

我想避免输入 <section>在@body片段内。 head-element 中的 title-element 也有同样的问题。执行此操作的最佳实践是什么(没有 js 互操作)?

最佳答案

有几种方法可以做到这一点......

  • 使用 CascadingValue 功能 在 MainLayout 中定义一个属性来获取子组件的标题,例如 about 组件。

    在MainLayout中添加CascadingValue组件,并传递MainLayout组件 作为 Value 属性的值。

    在子组件中定义一个 CascadingParameter 属性,用于存储 MainLayout 对象,并为其 Title 属性分配一个标题

    完整代码如下:

主布局

<div class="main">
    <div class="top-row px-4 auth">
        <h1>@Title</h1>
        <LoginDisplay />
        <a href="https://learn.microsoft.com/aspnet/" target="_blank">About</a>
    </div>

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

</div>

@code
{
  string title;

  public string Title
 {
    get => title;
    set
    {
        if(title != value)
        { 
            title = value;
            StateHasChanged();
        }
     }
  }
}  

关于.razor

@page "/about"
<div>....</div>

@code {
    [CascadingParameter]
    public MainLayout MainLayout { get; set; }

    protected override void OnInitialized()
   {

      MainLayout.Title = "About Title";

   }
 }
  • 创建一个定义 Title 属性的服务类,该属性可以通过 服务注入(inject)到的组件。该服务类还应该提供一种将子组件提供的标题传递给 MainLayout 的方法,MainLayout 应该刷新自身以显示提供的标题...

希望这有帮助...

关于asp.net-core - 具有 @Body 和更多属性的 Blazor WASM LayoutComponentBase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61556625/

相关文章:

asp.net-mvc-3 - Razor 语法没有按我预期的方式工作

c# - .net core AspnetCore Razor View 因 CompilationFailedException 而失败

.net-core - 如何停止 blazor @onclick 重新渲染页面

记录到 Blazor WASM 中的文件

c# - 如何在 ASP.NET Core 中返回 401 而不是 302?

c# - 由于模型关系而添加 Controller 时出错

asp.net-mvc-3 - 如何在不创建新路由的情况下为 Controller 设置自定义 URL 路径?

mysql - 带有 MySql.Data 的 .NET Core 2 导致权限错误

c# - 模型绑定(bind)忽略具有 JsonIgnore 属性的属性

blazor - 如何从子组件获取对 Blazor MainLayout 的引用