i有一个被检索的项目列表,并且可能具有不同的数量。因此,我有一个中继器来创建一个动态数量的行以显示每个项目。我需要每个行中的按钮可以更改该特定行列表中项目的某些属性。我只能为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();
}
不用担心。按钮不一样。该框架将确保它们是独一无二的。如果您想知道单击哪个按钮,则可以将CommandArgument
发送到OnCommand
方法。
<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();
}