2013-02-01 2 views
5

SDL Tridion 2011 SP1을 사용하여 동적 구성 요소 프레젠테이션을 게시 할 때 주로 출력 형식으로 REL을 사용하지만 이제는 ASP.NET 컨트롤 태그가 포함 된 DCP를 게시하려고합니다. 따라서 템플릿의 출력 형식을 ASCX로 변경하고 ASCX 구성 요소 프레젠테이션의 저장소를 웹 응용 프로그램 내의 파일 시스템으로 이동하도록 구성했습니다. 나는 ascx 파일을 디스크에서 볼 수 있으며 예상대로 내부에 제어 태그를 볼 수 있습니다.Tridion ASCX DCP가 자식 컨트롤을 렌더링하지 않습니다.

동일한 컨트롤 태그가 포함 된 aspx 페이지를 만들면 출력이 예상대로 나옵니 다. 그러나 ASCX 구성 요소 프레젠테이션이 컨트롤 태그의 출력을 렌더링하는 대신 구성 요소 프레젠테이션 어셈블러에 의해 실행되면 공백이 생깁니다. DCP 내의 일반 텍스트가 표시됩니다.

필자가 필요로하는 기능은 Tridion Dynamic Component 링크 컨트롤과 매우 유사하며 이미이 아키텍처 중 하나를 사용하여 성공했으며 성공했습니다. 나는 템플렛 안에 나의 꼬리표 및 tridion를, 하나씩 차례대로두기까지 갔다조차. 이 경우에는 tridion 태그의 출력을 보지만 내 web.config에서는 참조가 동일한 web.config에 연결되어 있지만 출력은 표시되지 않습니다.

Tridion의 구성 요소 프레젠테이션 어셈블러에서 ASCX DCP를 실행하고 자식 컨트롤을 성공적으로 렌더링 할 수 있음을 알 수 있습니다. 이러한 방법으로 렌더링 할 수 있도록 이러한 컨트롤을 제작할 때 요구 사항이 있습니까?

업데이트 : DCP 내 사이트 내에서 ASCX 파일에 게시

. 테스트를 위해, 지금 같은 DCP의 tridion 제어를 게시하고, 그래서 디스크의 출력은 다음과 같습니다 다음 DCP가 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" /> 

첫 번째 컨트롤이 생산 예상 출력, 두 번째 출력은 그렇지 않습니다. <xxx:ComponentLinkQS/> 태그를 ASPX 페이지에 직접 배치하면 잘 렌더링됩니다.

+0

간단한 "hello world"컨트롤을 작성하여 새로운 링킹 컨트롤이 페이지에 직접 존재하지 않고 실행 되는가? –

+0

ASCX DCP가 웹 응용 프로그램 내에 저장되어 있습니까? – Quirijn

답변

7

나는 이것이 (Neil Gibbons와 Hoang Chu에게가는 해결책에 대한 완전한 신용) 전에 이것을 본 것으로 생각한다.

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); 
    } 
} 

방법을 렌더링 너무 늦기 :

문제는 끝까지 Tridion.ContentDelivery DLL 내부와 특히 ComponentPresentation 서버 컨트롤에 의해 발생 그것은 렌더링 방법 DCP 사용자 컨트롤이 컨트롤로드의시 컨트롤 수명주기에서 다른 컨트롤의 이벤트가 유선 상태로 유지되므로 사용자가 Page_load를 제어하지 않습니다.

Tridion 포럼에서 수명주기의 초기에 포함 된 컨트롤을 실행하기 위해 표준 Content Delivery 사용자 컨트롤을 재정의하는 솔루션이 아래 링크에 제안되었습니다. https://forum.tridion.com/topic.asp?TOPIC_ID=5709&whichpage=3&SearchTerms=Page_Load (나는 합법성에 대해 확신하지 않습니다. 포럼에서 코드를 복사하고 여기에 추가하십시오. Tridion의 누군가가 고개를 끄덕 거리면 추가 할 수 있습니다.)

+0

안녕하세요 Jonathon, 포인터 주셔서 감사합니다 (Hoang은 전 동료이자 에이스 해커입니다!) 불행히도 그의 해결책은 다른 문제입니다. 컨트롤 수명주기와 관련이 있다고 생각합니다. 내가 아는 한 ComponentPresentationAssembler는 ASCX를 디스크에서로드 한 다음 렌더링합니다.그것은 자식 컨트롤을 위해 작동해야합니까, 아니면 명시 적으로 유선 연결되어야합니까? 트라이던트 컨트롤이 같은 방식으로 실행된다는 질문에 대한 업데이트를 보게 될 것입니다. 나는 무엇이 다른지 알고 싶다. –