在 Repeater 中创建独特的按钮

Create Unique Buttons Inside Repeater

我有一个检索到的项目列表,可以有不同的数量。因此,我有一个 Repeater 来创建动态数量的行以显示其中的每个项目。我需要在每一行中有一个按钮,可以更改列表中该特定行的项目的某些属性。我只能为 aspx 文件中的每一行创建相同的按钮,这意味着我无法确定要更改哪一行,因为所有按钮都是相同的。见下文:

<asp:Repeater runat="server" ID="repeater">
    <ItemTemplate>
        <li class="list-group-item"><%# Container.DataItem %>
            <asp:Button ID="btn" runat="server" />
        </li>
    </ItemTemplate>
</asp:Repeater>

列表项是循环显示的,所以我从 aspx 页面中删除了按钮,而是尝试在此循环中创建按钮,但它们没有显示。

for (int i = 0; i < listItems.Length; i++)
{
    openList.Add("ID: " + item[i]);
    repeater.DataSource = openList;
    Button btn = new Button();
    btn.ID = i.ToString();
    repeater.Controls.Add(btn);
    repeater.DataBind();
}

别担心。按钮不一样。该框架将确保它们是唯一的。如果你想知道点击了哪个按钮,你可以发送一个 CommandArgumentOnCommand 方法。

<asp:Repeater runat="server" ID="repeater">
    <ItemTemplate>
        <li class="list-group-item"><%# Container.ItemIndex %>
            <asp:Button ID="btn" runat="server" CommandArgument='<%# Container.ItemIndex %>' OnCommand="btn_Command" />
        </li>
    </ItemTemplate>
</asp:Repeater>

代码隐藏

protected void btn_Command(object sender, CommandEventArgs e)
{
    //if you need to access the button itself
    Button btn = sender as Button;

    //get the correct index from the commandargument
    Label1.Text = e.CommandArgument.ToString();
}