我需要在ASP.NET页面中生成以下内容。什么是最好,最简单的方法?
简化示例。因此,对于自定义属性,我需要将包含索引( i )的字符串传递给控件的属性。我可以从代码隐藏中做到这一点,但如果我能将它保存在.aspx文件中,它会更简单,更容易。
<table>
<%
for( var i = 0; i < 10; i++ )
{
%><tr>
<td>
<cc1:CustomControl runat="server" CustomProperty="SomeText[<% i %>]"/>
</td>
</tr>
<% } %>
</table>
基本上我需要将一个自定义的,而不是预定的值传递给asp.net控件。
答案 0 :(得分:2)
这可能不会像你期望的那样发挥作用。相反,添加这样的占位符:
<table>
<asp:PlaceHolder id="RowPlaceHolder" runat="server" />
</table>
然后在你的代码背后:
for (int i = 0;i<10;i++)
{
var tr = new HTMLTableRow();
var td = new HTMLTableCell();
var Custom = (CustomControl)LoadControl("MyControl.ascx");
Custom.id="Custom" + i.ToString();
Custom.CustomProperty = "SomeText[" + i.ToString() + "]";
td.Controls.Add(Custom);
tr.Controls.Add(td);
RowPlaceHolder.Controls.Add(tr);
}
更深入一点,如果数字10真的是硬编码的,那么从长远来看,你会发现很多更容易处理的事情,如果你继续将10个条目复制到你的控件中手动的aspx标记。 ASP.Net webforms中的动态控件充满了陷阱和陷阱。
如果数字来自某个合法数据源,那么您最好使用该数据源并将其绑定到数据控件(如转发器)。
答案 1 :(得分:0)
<%= i %>
应该适合你。
答案 2 :(得分:0)
你可以使用转发器摇滚并使用Container.ItemIndex,
<asp:Repeater ID="rpt" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<cc1:CustomControl runat="server" CustomProperty="SomeText[<%# Container.ItemIndex %>]"/>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>