我想知道是否可以从转发器控件中读取 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>"
根据下面的调用堆栈屏幕抓取,使用反射器并查看调用堆栈引导我使用以下方法(请参见突出显示的第一行):
我假设从...__BuildControl__control6()...中读取 .aspx 页面中标记的原始内容、切碎(RegEx?)并作为参数传递给以下方法:
System.Web.UI.DataBoundLiteralControl.SetStaticString(index, s);
对于本例中的 Repeater 控件,“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);