代码之家  ›  专栏  ›  技术社区  ›  Sumrak

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

  •  0
  • Sumrak  · 技术社区  · 16 年前

    我需要在ASP.NET页面中生成以下内容。最好、最简单的方法是什么?

    简化的例子。所以要自定义属性,我需要传递包含索引的字符串( )控件的属性。我可以从codebehind中完成它,但如果我能将它保存在.aspx文件中,它会更简单、更容易。

    <table>
    <% 
        for( var i = 0; i < 10; i++ )
    {
    %><tr>
        <td>
            <cc1:CustomControl runat="server" CustomProperty="SomeText[<% i %>]"/>
        </td>
    </tr>
    <% } %>
    </table>
    

    实际上,我需要向asp.net控件传递一个自定义值,而不是预定值。

    3 回复  |  直到 16 年前
        1
  •  2
  •   Joel Coehoorn    16 年前

    这可能不会像你期望的那样起作用。相反,请添加这样的占位符:

    <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.NETWebForms中的动态控件充满了陷阱和陷阱。

    如果数字来自某个合法的数据源,那么您最好实际使用该数据源并将其绑定到数据控件(如中继器)。

        2
  •  0
  •   ChrisLively    16 年前
    <%= i %>
    

        3
  •  0
  •   BigBlondeViking    16 年前

    你可以使用转发器,使用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>
    
    推荐文章