我試圖訪問div中的控件,但我找不到它們。asp.net無法找到從代碼隱藏在div中添加的控件
我得到了一個div中的一些控件。
<div id="divChampsFiltrageProjetsTest" class="divChampsFiltrageProjetsTest" runat="server">
<span runat="server" style="color:black;"> Filtre 1 : </span>
<asp:DropDownList ID="ddlFiltreProjets1" runat="server" ForeColor="Black" >
<asp:ListItem Value="no" Selected="True">No. Projet</asp:ListItem>
<asp:ListItem Value="desi">Designation Projet</asp:ListItem>
<asp:ListItem Value="chef">Chef de Projet</asp:ListItem>
</asp:DropDownList>
<asp:TextBox ID="txtValeurFiltreProjets1" runat="server" ForeColor="Black" />
<asp:Button ID="btnAddFiltre1" runat="server" Text="Ok" OnClick="btnAppliquerFiltreProjets_Click"/>
</div>
我可以在後面的代碼中找到這些控件。但是,當我從後面的代碼中添加一些控件時會出現問題。
HtmlGenericControl span = new HtmlGenericControl("span");
DropDownList ddlList = new DropDownList();
TextBox txtValeur = new TextBox();
Button btnAdd = new Button();
ListItem item1 = new ListItem("No. Projet", "no");
ListItem item2 = new ListItem("Désignation Projet", "desi");
ListItem item3 = new ListItem("Chef de Projets", "chef");
span.Style.Add(HtmlTextWriterStyle.Color, "Black");
span.InnerText = "Filtre " + (i + 1).ToString() + " : ";
ddlList.ID = "ddlFiltreProjets" + (i + 1).ToString();
ddlList.Items.Add(item1);
ddlList.Items.Add(item2);
ddlList.Items.Add(item3);
txtValeur.ID = "txtValeurFiltreProjets" + (i + 1).ToString();
txtValeur.ForeColor = System.Drawing.Color.Black;
btnAdd = btnAddFiltre1;
divChampsFiltrageProjetsTest.Controls.Add(span);
divChampsFiltrageProjetsTest.Controls.Add(ddlList);
divChampsFiltrageProjetsTest.Controls.Add(txtValeur);
divChampsFiltrageProjetsTest.Controls.Add(btnAdd);
這部分代碼將控件添加到div,當我得到頁面時,控件位於源代碼中。
<div id="MainContent_divChampsFiltrageProjets" class="divChampsFiltrageProjets" style="display:block;">
<div id="MainContent_divChampsFiltrageProjetsTest" class="divChampsFiltrageProjetsTest">
<span style="color:black;"> Filtre 1 : </span>
<select name="ctl00$MainContent$ddlFiltreProjets1" id="MainContent_ddlFiltreProjets1" style="color:Black;">
<option value="no">No. Projet</option>
<option value="desi">Designation Projet</option>
<option selected="selected" value="chef">Chef de Projet</option>
</select>
<input name="ctl00$MainContent$txtValeurFiltreProjets1" type="text" value="johan" id="MainContent_txtValeurFiltreProjets1" style="color:Black;" />
<span style="color:Black;">Filtre 2 : </span><select name="ctl00$MainContent$ddlFiltreProjets2" id="MainContent_ddlFiltreProjets2">
<option value="no">No. Projet</option>
<option value="desi">Désignation Projet</option>
<option value="chef">Chef de Projets</option>
</select><input name="ctl00$MainContent$txtValeurFiltreProjets2" type="text" id="MainContent_txtValeurFiltreProjets2" style="color:Black;" /><input type="submit" name="ctl00$MainContent$btnAddFiltre1" value="Ok" id="MainContent_btnAddFiltre1" /></div>
但是,當我試圖讓我從代碼後面加它說,該值是空的控件。
for (int i = 1; i < Convert.ToInt32(Session["nbFiltres"].ToString()) + 1; i++)
{
DropDownList ddl = (DropDownList)divChampsFiltrageProjetsTest.FindControl("ddlFiltreProjets"+i.ToString());
TextBox txt = (TextBox)divChampsFiltrageProjetsTest.FindControl("txtValeurFiltreProjets" +i.ToString());
Session["typeFiltreProjets" + i.ToString()] = ddl.SelectedValue.ToString();
Session["valeurFiltreProjets" + i.ToString()] = txt.Text;
}
這部分是在一個按鈕的點擊事件函數。
所以我的問題是,我從代碼後面添加的控件不是真的在div中。
有人知道爲什麼嗎?
您在頁面生命週期的哪個點添加了控件?如果它是在頁面初始化之後,那麼在每次回發後都需要重新創建它們。 – Paddy
實際上我在page_preRender中,現在我切換到Page_Load它工作。但現在重新創建控件2 ... –
也許是一個非常小的提示,但大多數程序員選擇用英文編碼所有內容,並且對於將來可能會使代碼的某些部分更容易閱讀的問題(不是每個人都知道法語,例如)。如果你的團隊在未來的某一天獲得國際成員,它也會變得更容易:) –