Tridion ASCX DCP不呈现子控件

Tridion ASCX DCP不呈现子控件,tridion,tridion-2011,tridion-content-delivery,Tridion,Tridion 2011,Tridion Content Delivery,当使用SDL Tridion 2011 SP1发布动态组件演示文稿时,我主要使用REL作为输出格式,但是现在我想发布一个包含ASP.NET控件标记的DCP。因此,我将模板的输出格式更改为ASCX,并将ASCX组件演示文稿的存储配置为转到web应用程序中的文件系统。我可以看到磁盘上的ascx文件,正如预期的那样,我可以看到里面的控制标签 如果我创建了一个包含相同控件标记的aspx页面,那么输出与我预期的一样,但是,当组件表示汇编程序执行ASCX组件表示时,它将显示为空,而不是呈现来自控件标记的输出

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

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

我需要的功能非常类似于Tridion动态组件链接控件,我已经用这种体系结构尝试了其中的一种,并且成功了。我甚至将我的标签和tridion一个接一个地放在模板中。在本例中,我看到了tridion标记的输出,但没有看到我自己的输出,即使引用连接在同一个web.config中

所以我可以看到,让Tridion的组件表示汇编程序执行ASCxDCP并成功地呈现其子控件是可能的。在编写这样一个控件时,是否需要确保它可以以这种方式呈现

更新:

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执行时,第一个控件产生预期的输出,而第二个控件不产生预期的输出。如果我将
标记直接放在ASPX页面上,它会呈现良好效果

我想我以前见过这一点(尼尔·吉本斯和黄菊为解决方案赢得了充分的赞誉)

该问题是由Tridion.ContentDelivery DLL中的ComponentPresentation服务器控件引起的,尤其是该控件在其呈现方法期间加载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方法在控件生命周期中太晚,任何其他控件都无法将其事件连接起来,因此从未触发“我的用户控件”页面加载

在Tridion论坛的以下链接上有一个解决方案,涉及覆盖标准内容交付用户控件,以便在生命周期的早期执行嵌入控件:
(我不确定从论坛复制代码并添加到这里是否合法。如果Tridion的人向我点头,那么我可以添加。)

你是否尝试过编写一个简单的“hello world”控件以查看在不直接在页面上执行新链接控件时是否会出现一些问题?ASCX DCP是否存储在web应用程序中?嗨,Jonathon,谢谢你的指针(Hoang是以前的同事,也是ace黑客!)不幸的是,他的解决方案针对的是另一个问题。我认为这与控制生命周期有关。据我所知,ComponentPresentationAssembler从磁盘加载ASCX,然后渲染它。这应该适用于子控件,还是它们也必须显式连接?您将从我对问题的更新中看到,Tridion控件以同样的方式执行。我希望我知道有什么不同。