0

我有一个带有列表视图的页面。列表视图中有标签和下拉列表。我想从 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");

任何人都知道我错过了什么?谢谢,吉姆

4

2 回答 2

0

假设 listview 数据源中有超过 1 个元素,为什么不将代码放在 ItemDataBound 处理程序中?我认为它应该工作。

于 2013-07-30T18:23:39.597 回答
0

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;
    }
}
于 2013-07-30T18:48:16.953 回答