You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor如何在@code代码块中访问父组件设置的ApplicationTemplate Context实例

解决方案

return (<ApplicationTemplate>的`Context`是组件的模板上下文参数,作用域仅限制在标签包裹的渲染区域内,所以默认无法直接在`@code`代码块中访问。你可以通过字段缓存的方式拿到实例:
1. 在`@code`块中声明一个和`context`类型匹配的私有字段,用来存储上下文实例
2. 在`<ApplicationTemplate>`内部的Razor代码块中,把上下文赋值给这个全局字段

### 完整示例代码
```razor
@page "somePage"

<TeamsApplication RequireAuthentication="true">
    <ApplicationTemplate Context="context">
        @* 无渲染代码块,完成上下文赋值 *@
        @{
            _templateContext = context;
            // 如果需要上下文加载后立即执行逻辑,可以在这里触发
            if (!_contextHasLoaded)
            {
                _contextHasLoaded = true;
                HandleContextLoaded();
            }
        }
        Some HTML...
        @*context works here*@
    </ApplicationTemplate>
)

@code{
// 替换为你实际context的对应类型,不清楚类型可以把鼠标悬停在模板内的context上查看
private ApplicationTemplateContext _templateContext;
// 标记上下文是否已加载,避免重复触发逻辑
private bool _contextHasLoaded;

private void HandleContextLoaded()
{
    // 这里可以正常访问上下文的所有属性和方法
    Console.WriteLine(_templateContext.UserName);
}

}

## 注意事项
- 不要在页面初始化生命周期方法`OnInitialized`/`OnInitializedAsync`中访问上下文字段,此时`<ApplicationTemplate>`还未完成渲染,字段尚未赋值,会为空
- 如果上下文存在更新的场景,可以在赋值逻辑中增加差异判断,处理上下文变更后的业务逻辑

---
内容的提问来源于stack exchange,提问作者Hey Dorothea
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:06:01