Tridion ASCX DCP不呈现子控件

Dom*_*nin 5 tridion tridion-content-delivery tridion-2011

使用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" />
Run Code Online (Sandbox Code Playgroud)

当DCP像这样发布并由ComponentPresentationAssembler执行时,第一个控件产生预期的输出,而第二个控制产生预期的输出.如果我将<xxx:ComponentLinkQS/>标签直接放在ASPX页面上,它会呈现正常.

Jon*_*ams 7

我认为我以前见过这个(完全归功于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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

下面有这涉及压倒一切的标准内容交付用户控件在生命周期早期执行嵌入式控制链路上提出了今年的外表套上论坛的解决方案: https://forum.tridion.com/topic.asp?TOPIC_ID = 5709&whichpage = 3&SearchTerms =的Page_Load (我不知道有关复制从论坛代码,并在这里将它的合法性.如果从外表套上有人给我点点头,然后我可以添加它.)