我正在创建一个组件以添加到块网格,因此我有以下 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
在 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。
进行正常检查,例如对于空返回等。