bind - 如何在 @Body 中使用 @bind-PropertyName
问题描述
我有一个有很多页面的项目。结构是: 包含菜单、标题和上下文的父页面。任务是将一些字符串从上下文页面发送到标题。问题是:我如何使用@bind-PropertyName
on @Body
?
MainLayout.razor:
@inherits LayoutComponentBase
<div class="sidebar">
<NavMenu />
</div>
<div class="main">
<div class="top-row px-4">
<Header PageTitle="@_PageTitle" />
</div>
<div class="content px-4">
@Body
</div>
</div>
@code{
private string _PageTitle { get; set; }
}
标题组件:
<div>Title: @PageTitle</div>
@code {
[Parameter]
public string PageTitle { get; set; }
}
上下文组件:
@page "/plainpage"
<div> @PageTitle </div>
<Content />
@code{
[Parameter]
public string PageTitle { get; set; } = "Plain Page";
public EventCallback<string> Initialized { get; set; }
protected override void OnInitialized()
{
OnPageInitialized();
}
private Task OnPageInitialized()
{
return Initialized.InvokeAsync(PageTitle);
}
}
如果不是@Body
我有<PlainPage />
组件,我会做<PlainPage @bind-PageTitle="_PageTitle" />
. 但是我该怎么做呢@Body
?
解决方案
最简单的方法是使用“上下文”页面可以用来回调布局的 CascadingValue。
因此,在您的 MainLayout 中,将 @Body 包装在 CascadingValue 中
<div class="content px-4">
<CascadingValue Value=@this>
@Body
</CascadingValue>
</div>
在@code
您的 MainLayout 中创建一个公共方法
public void SomeMethod(string SomeString)
{
// Do Something With SomeString like setting PageTitle
}
并在您的“上下文”代码中使用 CascadingParameter
[CascadingParameter] MainLayout mainLayout {get;set;}
protected override void OnInitialized()
{
mainLayout.SomeMethod(PageTitle);
}
推荐阅读
- vue.js - 如何将用户 ID 附加到 Vue Data 对象中的链接
- sumo - 如何在 traCI 模拟中迭代调用双路由算法?
- html - 选择 2 个表,但我想限制第二个表上的行
- java - java - 如何在java中将一个列表类型转换为另一个列表?
- javascript - 如何使用循环过程停止 setInterval
- java - 合并多个 Spring JPA Page 对象结果
- python - 我想在按钮单击时更新我的框架和饼图
- java - 应用程序打开时如何以编程方式恢复位置访问
- sql - 如何执行存储在表中的 SQL 查询
- google-apps-script - 如何从表单中获取仅电子邮件项目的列表?