Umbraco 11 获取块网格项组件中的当前页面

问题描述 投票:0回答:1

我正在创建一个组件以添加到块网格,因此我有以下 razor 页面 cshtml

@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 is not a property of umbraco context
Umbraco.AssignedContentItem // Cannot return the IPublishedContent because the UmbracoHelper was not constructed with an IPublishedContent.
UmbracoContext.PublishedRequest.PublishedContent // Published request is null
razor umbraco
1个回答
0
投票

在 Umbraco 中,您可以从 Razor 组件中访问当前页面的 IPublishedContent。使用 UmbracoHelper 来检索它。

但是,您确实需要访问 Razor 组件中的 UmbracoHelper,您可以通过将 UmbracoHelper 注入到 Razor 组件中来实现。

使用 @inject 指令来执行此操作。

c#代码

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

@{
    // Your existing code
    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;
}

<!-- Your HTML content -->

通过注入 UmbracoHelper,您可以根据需要访问 IPublishedContent。

C#代码

var currentPage = Umbraco.Content(UmbracoContext.PublishedRequest.PublishedContent.Id);

希望现在您可以访问当前页面的IPublishedContent。

进行正常检查,例如对于空返回等。

© www.soinside.com 2019 - 2024. All rights reserved.