我有一个转发器,我试图从LinkButton事件访问Checkbox控制器.Repeater控件只包含文字和链接按钮,但不包含复选框控件。
<asp:Repeater ID="rptTicketsInPerformance" OnItemDataBound="rptTicketsInPerformance_ItemBound" runat="server">
<ItemTemplate>
<asp:CheckBox ID="cbticketSelect" runat="server" />
<asp:Literal ID="ltticketDescription" runat="server" />
</ItemTemplate>
<FooterTemplate>
<div class="change-buttons">
<asp:LinkButton ID="btDonate" runat="server" CssClass="button-primary" Text="Donate" OnClick="donateButton_click" />
<asp:HyperLink ID="hlCancel" runat="server" CssClass="button-primary close-reveal-modal" Text="Cancel" />
</div>
</FooterTemplate>
</asp:Repeater>
代码背后
protected void donateButton_click(object sender, System.EventArgs e)
{
RepeaterItem items = ((sender as LinkButton).Parent as RepeaterItem);
foreach(var itm in items.Controls)
{
if(itm is CheckBox)
{
// Do something here
}
}
}
答案 0 :(得分:0)
您应该注意Parent
的{{1}}实际上是sender
,而不是转发器项目。
所以,你应该指向
Repeater
然后迭代这些,找到sender.Parent.Items
。
答案 1 :(得分:0)
请尝试FindControl
:
protected void donateButton_click(object sender, System.EventArgs e)
{
RepeaterItem items = ((sender as LinkButton).Parent as RepeaterItem);
foreach (RepeaterItem itm in items.Controls)
{
CheckBox chk = (CheckBox)itm.FindControl("cbticketSelect");
if (chk.Checked)
{
Lable1.Text = "Do something ";
// Do something here
}
}
}
答案 2 :(得分:0)
您可以循环所有Repeater项目并使用FindControl
在每个项目中找到CheckBox。
protected void donateButton_Click(object sender, EventArgs e)
{
string checkedBoxes = "";
foreach (RepeaterItem item in rptTicketsInPerformance.Items)
{
CheckBox cb = item.FindControl("cbticketSelect") as CheckBox;
checkedBoxes += cb.Checked.ToString() + ", ";
}
Label1.Text = checkedBoxes;
}