gpt4 book ai didi

Tridion ASCX DCP 不呈现子控件

转载 作者:行者123 更新时间:2023-12-04 18:10:56 26 4
gpt4 key购买 nike

使用 SDL Tridion 2011 SP1 发布动态组件演示文稿时,我主要使用 REL 作为输出格式,但是我现在想要发布包含 ASP.NET 控件标记的 DCP。因此,我将模板的输出格式更改为 ASCX,并将 ASCX 组件演示的存储配置为转到我的 Web 应用程序中的文件系统。我可以看到磁盘上的 ascx 文件,正如预期的那样,我可以看到里面的控制标签。

如果我创建一个包含相同控件标记的 aspx 页面,则输出与我预期的一样,但是,当组件呈现汇编器执行 ASCX 组件呈现时,它不是呈现控件标记的输出,而是空白。 DCP 中的纯文本确实会显示出来。

我需要的功能与 Tridion 动态组件链接控件非常相似,我已经在此架构中尝试过其中之一,并成功了。我什至将我的标签和 tridion 一个接一个地放在模板中。在这种情况下,我看到了来自 tridion 标签的输出,但不是来自我自己的,即使引用连接在同一个 web.config 中。

所以我可以看到,可以让 Tridion 的组件呈现汇编器执行 ASCX DCP 并成功呈现其子控件。创作这样的控件时是否有要求以确保它可以以这种方式呈现?

更新:

DCP 发布到我站点内的 ascx 文件中。出于测试目的,我现在在同一个 DCP 中发布 tridion 控件,因此磁盘上的输出如下所示:

<tridion:DynamicComponentLink PageURI="tcm:34-667-64" ComponentURI="tcm:34-876" 
TemplateURI="tcm:34-864-32" LinkText="Some page" runat="server" />
<xxx:ComponentLinkQS runat="server" ComponentUri="tcm:34-945"
QueryString="item=876" Text="Some page" />

当 DCP 像这样发布并由 ComponentPresentationAssembler 执行时,第一个控件会产生预期的输出,而第二个控件则不会。如果我放置一个 <xxx:ComponentLinkQS/>直接在 ASPX 页面上标记,它呈现得很好。

最佳答案

我想我以前见过这个(解决方案的全部功劳归功于 Neil Gibbons 和 Hoang Chu)。

该问题是由 Tridion.ContentDelivery DLL 中的 ComponentPresentation 服务器控件引起的,特别是该控件在其 Render 方法期间加载到 DCP 用户控件中的方式:

protected override void Render(HtmlTextWriter writer)
{
if (HttpContext.Current != null && HttpContext.Current.Application != null)
{
ComponentPresentationAssembler componentPresentationAssembler = new ComponentPresentationAssembler(this.pageUri, base.Page);
writer.Write(componentPresentationAssembler.GetContent(this.componentUri, this.templateUri));
base.RenderChildren(writer);
}
}

Render 方法在控件生命周期中为时已晚,任何其他控件都无法连接它们的事件 - 因此我的用户控件 Page_load 永远不会被触发。

在以下链接的 Tridion 论坛上有一个针对此问题的解决方案,该解决方案涉及覆盖标准内容交付用户控件以在生命周期的早期执行您的嵌入式控件: https://forum.tridion.com/topic.asp?TOPIC_ID=5709&whichpage=3&SearchTerms=Page_Load
(我不确定从论坛复制代码并将其添加到此处的合法性。如果 Tridion 的某个人向我点头,那么我可以将其添加进去。)

关于Tridion ASCX DCP 不呈现子控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14648140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com