另一个中继器内的中继器.访问事件值
本文关键字:中继器 事件 访问 另一个 | 更新日期: 2023-09-27 18:22:48
我在另一个中继器中有一个中继器。第二个中继器有一个复选框事件"isChecked_OnCheckedChanged"。我的问题就在那里。当此事件发生时,我需要访问父中继器中变量"lblName"的值以及变量"lbl ID"的值。
<asp:Repeater ID="rptOne" OnItemDataBound="populateSecondRepeater" runat="server">
<HeaderTemplate>
<table s>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label ID="lblID" runat="server" Text='<%# Eval("ID") %>'></asp:Label>
</td>
<td style="width: 15%; vertical-align: top;">
<asp:Repeater ID="rptTwo" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td style="width: 85%;">
<img runat="server" src='<%# Eval("Img") %>' alt="#" id="img_flag" /></td>
<td style="width: 15%; padding-right: 40px">
<asp:Label ID="lblName" runat="server" Style="display: none;" Text='<%# Eval("IDName") %>'></asp:Label>
<asp:CheckBox ID="check" runat="server" AutoPostBack="True" Checked='<%# Eval("isChecked") %>' OnCheckedChanged="isChecked_OnCheckedChanged" />
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
我可以访问变量"lblName"的值,但如何访问这些值父中继器的?
protected void isChecked_OnCheckedChanged(object sender, EventArgs e)
{
CheckBox chk = (sender as CheckBox);
RepeaterItem item = chk.NamingContainer as RepeaterItem;
if (item != null)
{
Label lbl = (Label) item.FindControl("lblName");
}
}
谢谢。
有多种方法可以做到这一点。您可以将类似ParentID
属性的内容添加到数据模型中,将其设置为所需的值,并将其绑定到lblName
标签旁边的隐藏字段。
或者,对rptOne
中的每个项目使用<tr runat="server" id="rptOneRow">
,然后从RepeaterItem
跳到isChecked_OnCheckedChanged
中,直到找到这样的行。然后使用FindControl
查找lblID
。
或者在这里查看如何直接访问数据-在HeaderTemplate中访问嵌套中继器中的父数据。