2013-07-30 100 views
0

我有頁面和listview在裏面。在listview中有標籤和下拉列表。我想從ddlTags_Init()方法訪問標籤的文本。 代碼:如何訪問父控件內部的控件? (asp.net c#)

<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"); 

任何人都知道我失去了什麼? 謝謝,吉姆

+1

請問這段代碼不工作,或者你問是否有更好的方法來做到這一點? –

+0

不,我沒有得到任何字符串文本的結果,我不能得到標籤的價值。 –

+0

請點擊您的文章下方的「編輯」鏈接按鈕,並添加有關錯誤或您所期望的不起作用的信息。謝謝! – ForceMagic

回答

0

假設listview數據源中有超過1個元素,爲什麼不把你的代碼放在ItemDataBound處理程序中?我認爲它應該工作。

+0

如果這樣做,我有dropdownlist中的數據的問題(我已經刪除了第3行後面的代碼) –

+0

好的。做同比發現確切的問題?調試,你在父對象中看到了什麼? – Alessio

0

初始化獲取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; 
    } 
} 
相關問題