2011-09-28 2 views
6

RenderControl 메서드에 이상한 문제가 있습니다.RenderControl 메서드가 자동 닫기 태그를 렌더링하지 않습니다.

I이 마크 업으로의 UserControl (AN ASCX 파일)가이 코드를 정상적인 페이지주기에서 실행하는 경우. (이 페이지에 추가 할 때 등)

<ul> 
<asp:Repeater ID="rptImages" runat="server"> 
    <ItemTemplate> 
     <li> 
      <a href="<%# ((Image)Container.DataItem).Url %>"> 
       <img src="<%# ((Image)Container.DataItem).Url %>?mw=80&mh=50" title="<%# ((Image)Container.DataItem).Title %>" alt="<%# ((Image)Container.DataItem).Alt %>" /> 
       <p><%# ((Image)Container.DataItem).Description %></p> 
      </a> 
     </li> 
    </ItemTemplate> 
</asp:Repeater> 
</ul> 

그것이 유효한 XHTML 렌더링을 마크 업 :

p 태그에는 비어있는 경우에도 닫기 태그가 있고 이미지 태그에도 닫는 태그가 있습니다.

나는 서버에서이 컨트롤을 인스턴스화 사용하여 문자열로 구문 분석 할 때이 같은 RenderControl() 메소드 :이 같은

StringBuilder builder = new StringBuilder(); 
using (StringWriter writer = new StringWriter(builder)) 
{ 
    using (XhtmlTextWriter htmlWriter = new XhtmlTextWriter(writer)) 
    { 
     var control = (GalleryControl)LoadControl("~/layouts/Controls/Gallery/GalleryControl.ascx"); 
     control.Images = m_images; 
     control.RenderControl(htmlWriter); 
    } 
} 
return builder.ToString(); 

그런 다음 XHTML 반환 외모 :

<ul> 
    <li> 
     <a data-fullscreen="/someimage.jpg" href="/another-image.jpg"> 
      <img src="/myimage?mw=80&mh=50" title="Image Title" alt="Alt Text"> 
      <p> 
     </a> 
    </li> 
</ul> 

이미지 태그에 닫기 태그가 누락되어 있고 p 태그도 닫히지 않으므로이 XHTML이 더 이상 유효하지 않습니다.

저는 하루 종일 보냈습니다. HtmlTextWriter 대신 XhtmlTextWriter를 사용하여 RenderControl에 전달하려고했으나 아무런 차이가 없었습니다.

다른 누구도이 문제를 겪어 본 적이 있습니까? 그것은 아주 기괴하다. 그리고 지금 당황하게하게되는 팀에서 우리의 제비 뽑기가있다! 어떤 도움이나 아이디어라도 감사 할 것입니다.

편집 :이 코드는 Sitecore 프로세서 스택에서 실행되고 있음을 나는 아마 언급해야

. ExpandLinks 프로세서 바로 앞에있는 "renderField"프로세서 스택에서 실행됩니다.

+0

@Sam을 다음'RenderControl' 방법은'Control' 클래스에서 상속됩니다. –

+0

여기에 나와있는 것과 거의 같은 솔루션을 만들었으므로 동일한 오류를 재현 할 수 없습니다. 출력되는 HTML이 유효합니다. 그 리피터의 바인딩이 그 방법으로 이미지 세터에서 일어나고 있다고 가정합니까? 그 "데이터 - 전체 화면"은 어디에서 오는 것입니까, 당신은 분명히 우리에게 builder.ToString()이 리턴하고 있습니다, 자바 스크립트 간섭이 일어나기 전에? – Kasaku

+0

예, builder.ToString()에서 반환 된 텍스트를 가져 와서 여기에 붙여 넣었습니다. 나는 거기에 뭔가 덤비는 것이있을 수도 있지만 이것이 HtmlTextWriter에 첨부 된 StringBuilder에서 반환되는 방법이라고 생각했습니다. – NullReferenceException

답변

1

나는이 라인이 실행되지 않습니다 의심되거나 예외가 발생하고 종료 할 수 없습니다 삼켰을 :

<%# ((Image)Container.DataItem).Description %> 
+1

Visual Studio에서 이것을 디버깅 할 수 있다면 디버깅 설정을 변경하여 예외가 잡히지 않고 던지면 중지되도록 변경하십시오. 삼켜지는 예외를 발견하는 좋은 방법입니다. 디버그 -> 예외 옵션에 있습니다. –

+0

예외를 사용했지만 아무 것도 throw되지 않습니다. 또한 이미지 목록을 컨트롤에 바인딩 할 때 "Description"속성을 확인한 다음 null이 아닌 빈 문자열을 표시했습니다. – NullReferenceException

관련 문제