リピーター コントロール内から ItemTemplate の生のマークアップを読み取ることができるかどうかを知りたいですか?
以下のリピーターを検討してください。
<asp:Repeater ID="uiReport" runat="server" EnableViewState="False">
<HeaderTemplate>
<table border="1">
<thead>
<tr>
<th>Product</th>
</tr>
</thead>
<tbody>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#((Product)Container.DataItem).ProductName%></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</tbody></table>
</FooterTemplate>
</asp:Repeater>
項目テンプレートを生の文字列形式で読み取ろうとしています。たとえば、次のような文字列として読み込もうとしています。
string itemTemplate = "<tr><td><%#((Product)Container.DataItem).ProductName%></td></tr>"
Reflector を使用してコール スタックを調べると、以下のコール スタック画面のグラブに従って、次のメソッドにたどり着きました (強調表示された最初の行を参照)。
...__BuildControl__control6()...内から、.aspx ページのマークアップの生のコンテンツが読み取られ、切り刻まれ (RegEx?)、パラメーターとして以下のメソッドに渡されると想定しています。
System.Web.UI.DataBoundLiteralControl.SetStaticString(index, s);
この例のリピーター コントロールでは、's' (文字列) パラメーターの値は次のとおりです。
\r\n <tr>\r\n <td>
<%# の最初のインスタンスで文字列が分割されていることに注意してください。
MSDN 検索では、SetStaticString メソッドが .NET Framework インフラストラクチャをサポートしており、コードから直接使用することを意図していないことが確認されています。
http://msdn.microsoft.com/en-us/library/system.web.ui.databoundliteralcontrol.setstaticstring.aspx
生のテンプレート マークアップを取得できる仮想メソッドが不足していますか、それともファイルの内容を自分で読み取り (以下のコード例) 、Control 基本クラスの必要なRender()メソッドをオーバーライドする唯一のオプションですか?
.aspx ページのコンテンツを手動で読み取るコードの詳細な例:
string rawPageMarkUp = File.ReadAllText(physicalPathOfAspxPage);
string rawItemTemplate = RegExMethodToExtractItemTemplateFromControl(controlName, rawPageMarkUp);