如何访问父控件内部的控件?(asp.net c#)
本文关键字:控件 net asp 何访问 访问 内部 | 更新日期: 2023-09-27 18:25:29
我有一个带有listview的页面。listview中有标签和下拉列表。我想从ddlTags_Init()方法访问标签的文本。代码:
<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1"
DataKeyNames="id_Image" onitemdatabound="ListView1_ItemDataBound">
<ItemTemplate>
<asp:Label ID="TagsLabel" runat="server" Text='<%# Eval("Tags") %>' />
<asp:DropDownList ID="ddlTags" runat="server" OnInit="ddlTags_Init" >
</asp:DropDownList>
</ItemTemplate>
</asp:ListView>
代码背后:
protected void ddlTags_Init(object sender, EventArgs e)
{
DropDownList ddlTags = (DropDownList)sender;
Label lblTag = (Label)ddlTags.Parent.FindControl("TagsLabel");
string text=lblTag.Text;
}
目前我被卡住了
Label lblTag = (Label)ddlTags.Parent.FindControl("TagsLabel");
有人知道我错过了什么吗?谢谢,Jim
假设listview数据源中有1个以上的元素,为什么不将代码放入ItemDataBound处理程序中?我认为它应该起作用。
Init获取Label的绑定值为时过早。换句话说,标签值还没有绑定。
相反,您可能需要考虑使用ItemDataBound
方法。
<asp:ListView ID="ListView1" runat="server"
OnItemDataBound="ListView1_ItemDataBound" ...>
....
</asp:ListView>
protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
var ddlTags = e.Item.FindControl("ddlTags") as DropDownList;
var tagsLabel = e.Item.FindControl("TagsLabel") as Label;
}
}