2012-11-16 32 views
0

我試圖從代碼隱藏中添加它們後,訪問DropDownList。 如果我的DropDownList添加到我的.aspx頁面中是這樣的:如何獲得DropDownList控件的訪問權限,如果我從代碼中添加它們

<div id="FiltersDiv" runat="server"> 
       <asp:DropDownList ID="DropDownListMenu" runat="server" 
         DataTextField="name" DataValueField="id" 
        AutoPostBack="true" 
         onselectedindexchanged="DropDownListMenu_SelectedIndexChanged" > 
       </asp:DropDownList> 

我可以在任何情況下

protected void AddButton_Click(object sender, EventArgs e) 
{ 
    var dl = addProductLocationFiltersDiv.Controls.OfType<DropDownList>(); 
} 

但如果我從代碼添加

var ddl = new DropDownList(); 
ddl.DataSource = flist; 
ddl.DataTextField = "name"; 
ddl.DataValueField = "id"; 
ddl.DataBind(); 
FiltersDiv.Controls.Add(ddl); 

我需要訪問添加幾個DropDownList的,我現在不會有多少人會。所以,我需要循環。 我錯過了一些屬性,或者我需要怎麼做?

+0

您可以擴展您需要訪問下拉列表的位置嗎?按照定義,您已經可以在創建時訪問代碼。 – RemarkLima

回答

2

當您通過代碼添加控件時,您可以通過變量名稱來訪問它。

如果您需要訪問其中幾個,請考慮將其放在List<DropDownList>(或List<Control>,如果您有不同類型的控件)。

如果您需要分享這些跨代碼的方法在後面,使用一個字段而不是局部變量。

請注意,由於ASP.NET page lifecycle的工作原理,您可能需要在每次回發時重新創建這些文件,否則您將無法訪問它們。動態重新創建此類控件的最佳位置在OnInit處理程序中。

+0

我已經更新了我的問題。我在Page_Load上創建控件,我需要通過點擊某個按鈕來訪問它們,你能指點我一些示例還是給我寫一些,謝謝。 –

+0

@ infoexpert.it - 我在我的回答中涵蓋了這一點。首先,'Page_Load'不是創建這些的最佳位置。請嘗試將它們移至「OnInit」。其次 - 正如我所說的,如果你需要分享,你應該做這些_fields_而不是局部變量。我也推薦閱讀我發佈的鏈接中的所有信息。 – Oded

0
foreach(DropDownList ddl in FiltersDiv.Controls.OfType<DropDownList>()) 
{ 
    Trace.Write(ddl.SelectedValue); 
} 

這是從我的頭頂,所以你可能需要將FiltersDiv轉換爲下拉列表 - 至於說,你需要確保控制已儘快重建爲可能在寫入或讀取控制數據之前的頁面。

如果您嘗試過早或者未創建控件,您將無法獲得結果。

相關問題