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

Umbraco 11块网格项组件中如何获取当前页面IPublishedContent?

在Umbraco块网格组件中获取当前页面的IPublishedContent对象

我正在创建一个要添加到块网格的组件,对应的Razor页面代码如下:

@using Umbraco.Extensions
@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage<Umbraco.Cms.Core.Models.Blocks.BlockGridItem>

@{
    string title = Model.Content.Value<string>("Title");
    string subTitle = Model.Content.Value<string>("SubTitle");
    string alignment = Model.Content.Value<string>("Alignment");
    var image = Model.Content.Value<IPublishedContent>("BackgroundImage");
    string imageUrl = image != null ? Umbraco.Media(image.Id).Url() : "/image/upload/no-image_bucaqf.png";

    string modifier = !string.IsNullOrWhiteSpace(alignment) ? $"simple-banner__content--{alignment.ToLower()}" : string.Empty;
}


<div class="simple-banner">
    <img src="@imageUrl" alt="@title" class="simple-banner__image" />
    <div class="simple-banner__content @modifier">
        @if (!string.IsNullOrWhiteSpace(title))
        {
            <h2 class="simple-banner__title">@title</h2>
        }
        @if (!string.IsNullOrWhiteSpace(subTitle))
        {
            <h3 class="simple-banner__subtitle">@subTitle</h3>
        }
    </div>
</div>

该组件运行正常,但我需要获取组件所在当前页面的部分数值,请问如何在组件内获取当前页面的IPublishedContent对象?

我尝试了以下方法,但大多报错:

UmbracoContext.Current  // current 不是 UmbracoContext 的属性
Umbraco.AssignedContentItem // 无法返回IPublishedContent,因为UmbracoHelper未使用IPublishedContent构造
UmbracoContext.PublishedRequest.PublishedContent // PublishedRequest 为null

解决方案

方法1:通过Model.Parent直接获取

块网格项(BlockGridItem)的Parent属性指向包含该块的父级内容,也就是当前页面,直接使用即可:

@{
    // 获取当前页面并做空值判断
    if (Model.Parent is IPublishedContent currentPage)
    {
        // 示例:获取页面的某个字段值
        var pageMetaTitle = currentPage.Value<string>("metaTitle");
    }
}

方法2:注入IPublishedRequestAccessor获取(适用于嵌套块等复杂场景)

如果Model.Parent无法满足需求(比如块嵌套在其他块内部),可以通过依赖注入IPublishedRequestAccessor来获取当前请求对应的页面:

@using Umbraco.Cms.Web.Common
@inject IPublishedRequestAccessor PublishedRequestAccessor
@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage<Umbraco.Cms.Core.Models.Blocks.BlockGridItem>

@{
    var currentPage = PublishedRequestAccessor.PublishedRequest?.PublishedContent;
    if (currentPage != null)
    {
        // 使用currentPage获取页面字段
        var pageDescription = currentPage.Value<string>("pageDescription");
    }
}

为什么之前的方法报错

  • UmbracoContext.Current:Umbraco 9及以上版本已移除静态Current属性,需通过依赖注入访问UmbracoContext。
  • Umbraco.AssignedContentItem:块网格组件的UmbracoHelper实例未绑定到当前页面内容,因此无法通过该属性获取。
  • UmbracoContext.PublishedRequest.PublishedContent:部分场景(如后台预览)下PublishedRequest可能为null,且UmbracoContext需正确注入才能使用。

内容的提问来源于stack exchange,提问作者Pete

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:17:22