如何在aspx页面上将自定义值传递给asp.net控件?

时间:2009-07-08 21:18:11

标签: asp.net dynamic-controls

我需要在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控件。

3 个答案:

答案 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>