【发布时间】:2014-02-15 06:42:51
【问题描述】:
我正在尝试访问 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 中。
有人知道为什么吗?
【问题讨论】:
-
您在页面生命周期的哪个阶段添加了控件?如果是在页面初始化之后,则需要在每次回发后重新创建它们。
-
实际上我在 page_preRender 中,现在我切换到 Page_Load 它工作。但是现在重新创建了控件 2...
-
也许是一个很小的提示,但大多数程序员选择用英语编写所有代码,并且对于将来可能使您的某些代码更易于阅读的问题(例如,并非每个人都懂法语)。如果您的团队在未来的某一天获得国际成员,它也会变得更容易:)
-
我知道 ^^ 实际上我的团队只由法国人组成,只有法国人可以访问代码,但我打算在发表评论和评论时用英文输入代码优化代码。实际上它更像是代码的粗略版本。
标签: c# asp.net html code-behind