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
相关产品推荐
相关产品推荐

