2013-02-01 10 views
5

SDL Tridion 2011 SP1を使用して動的コンポーネントプレゼンテーションを公開する場合は、主にRELを出力フォーマットとして使用しますが、ASP.NETコントロールタグを含むDCPを公開する必要があります。したがって、テンプレートの出力形式をASCXに変更し、ASCXコンポーネントプレゼンテーション用のストレージをWebアプリケーション内のファイルシステムに移動するように構成しました。私はディスク上のascxファイルを見ることができ、期待どおりに内部に制御タグが見えます。Tridion ASCX DCPは子コントロールをレンダリングしません

同じコントロールタグを含むaspxページを作成した場合、出力は予期したとおりですが、コントロールタグからの出力をレンダリングするのではなくコンポーネントプレゼンテーションアセンブラでASCXコンポーネントプレゼンテーションを実行すると、空白になるDCP内のプレーンテキストが表示されます。

私が必要とする機能は、Tridion Dynamic Componentリンクコントロールと非常によく似ています。私は既にこのアーキテクチャでこれらの1つを試して成功しました。テンプレートの中に、自分のタグとトリディアンの両方を入れていく限り、私は行ってしまった。この場合、参照は同じweb.configに組み込まれていますが、私はtridionタグからの出力を表示しますが、自分の出力は表示しません。

TridionのコンポーネントプレゼンテーションアセンブラでASCX DCPを実行し、子コントロールを正常にレンダリングできることがわかりました。このようなコントロールを作成して、このようにレンダリングできるようにするには、おそらく要件がありますか?

UPDATE:

DCPは、私のサイト内ASCXファイルに公開されます。テストの目的のために、私は今、同じDCPでTridionのコントロールを公開していますので、ディスク上の出力は次のようになります。DCPは、次のように発表され、第1の制御が生成ComponentPresentationAssemblerによって実行された場合

<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" /> 

2番目の出力は期待していません。 <xxx:ComponentLinkQS/>タグをASPXページに直接配置すると、それはうまく描画されます。

+0

シンプルな "hello world"コントロールを書いてみましたか?新しいリンクコントロールはページ上に直接実行されることなく実行されますか? –

+0

ASCX DCPはWebアプリケーション内に保存されていますか? – Quirijn

答えて

7

私はこれを前に見たと思います(ソリューションの全面的な評価はNeil GibbonsとHoang Chuになります)。

それはRenderメソッドをだ中に問題が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メソッドが遅すぎます他のコントロールのイベントをワイヤードアップさせるコントロールライフサイクルでは、私のユーザーコントロールのPage_loadは決してトリガーされません。 (私はの合法性について確認していないhttps://forum.tridion.com/topic.asp?TOPIC_ID=5709&whichpage=3&SearchTerms=Page_Load

ソリューションがありますが、標準的なコンテンツ配信ユーザーは、以前のライフサイクルでの埋め込みコントロールを実行するための制御オーバーライドが含まれ、下記のリンクをTridionのフォーラムで、このために提案しましたフォーラムからコードをコピーしてここに追加してください。もしTridionの誰かが頷けば、私はそれを追加することができます。)

+0

こんにちはJonathon、ポインタのおかげで(Hoangは元同僚とエースハッカーです!)残念ながら、彼の解決策は別の問題のためです。コントロールのライフサイクルに関係していると思います。私が知る限り、ComponentPresentationAssemblerはASCXをディスクからロードしてレンダリングします。それは子供のコントロールのために働かなければならないのか、それとも明示的に配線されなければならないのでしょうか?私の更新から、Tridionコントロールが同じように実行されたという質問が表示されます。私は何が違っているかを知りたがっています。 –