2011-09-28 7 views
6

RenderControlメソッドに奇妙な問題があります。RenderControlメソッドが自己終了タグを表示しない

私は、このマークアップでユーザーコントロール(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はもはや有効ではありません。

私はこれに一日を費やしました。私はRenderControlに渡すHtmlTextWriterの代わりにXhtmlTextWriterを試しましたが、これは何の違いもありませんでした。

他に誰もこの問題を抱えていますか?それは非常に奇妙で、チームの多くは現時点で困っています!どんな助けやアイデアも感謝します。

EDIT:

私はおそらく、このコードは、サイトコアプロセッサスタック内で実行されていることを言及している必要があります。これはExpandLinksプロセッサの直前で "renderField"プロセッサスタックで実行されます。

+0

@Sam: 'RenderControl'メソッドは' Control'クラスから継承されます。 –

+0

ここに示したソリューションとほぼ同じソリューションを作成しましたが、同じエラーを再現することはできません。出力されるHTMLは有効です。私はあなたのリピータのバインディングは、その方法でイメージセッターで発生していると仮定しますか?その "データフルスクリーン"はどこから来ているのですか?javascriptの干渉が起こる前に、Builderが何を返すのか間違いなくあなたに教えてくれますか? – Kasaku

+0

はい、builder.ToString()から返されたテキストをキャッチして、ここに貼り付けました。私はそこに何か他のことがあったかもしれないと思ったが、これはHtmlTextWriterに添付されているStringBuilderから返される方法である。 – NullReferenceException

答えて

1

私は、この行が実行されない疑いがあるか、例外がスローされ、それが終了することができません飲み込まれる:

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

Visual Studioでこれをデバッグできる場合は、例外が捕捉されずにスローされたときに停止するようにデバッグ設定を変更してください。それは飲み込まれた例外を見つける良い方法です、それはDebug - > Exceptionsオプションにあります。 –

+0

私は例外を有効にしましたが、例外はスローされていません。また、画像リストをコントロールにバインドするときに、「Description」プロパティをチェックしました。これはnullではなく空の文字列です。 – NullReferenceException

関連する問題