我有一个MasterPage和一个内容页面
我的内容页面有许多控件, - 下拉列表,文本框,单选按钮。
我想循环遍历所有控件,如果它是上面的控件之一,那么我想获得selectedvalue,text等
我知道我可以直接通过名称访问控件,但由于这是我在asp.net上的学习经验,我希望能够通过Controls集合
我试过
foreach(Controls ctrl in Master.Controls)
{
}
但我无法达到我需要的控制。
编辑::我想因为我的智能感知失败而我把枪拉得太快了。我在我的内容页面上的代码中解决了我的问题
protected void btnSearch_Click(object sender, EventArgs e)
{
foreach (Control ctrl in Master.Controls)
{
if (ctrl is HtmlForm)
{
foreach(Control formControl in ctrl.Controls)
{
if (formControl is ContentPlaceHolder)
{
foreach (Control placeHolderControl in formControl.Controls)
{
if (placeHolderControl is DropDownList)
{
string test = "AA";
}
}
}
}
}
}
}
现在建立一个递归例程
答案 0 :(得分:2)
控制系统处于层次结构中。页面中唯一的控件通常是Form(但并非总是如此)。该表单包含<form>
标记中显示的控件。如果表单中包含<p runat="server">
,则<p>
将包含其中显示的所有控件。
例如,
<form runat="server">
<p runat="server">
<asp:Label runat="server" />
<asp:TextBox runat="server" />
</p>
<p runat="server">
<asp:Button runat="server" />
</p>
</form>
将产生以下结构:
form
- p
- label
- textbox
- p
- button
因此,您必须遍历直接包含控件中的控件。
- 编辑:
此外,要遍历所有控件,您需要递归或迭代循环到层次
// This is the recursive version
public void LoopControl(Control parent) {
foreach (Control control in parent) {
// do stuff
LoopControl(control);
}
}
// And then
LoopControl(Page);
答案 1 :(得分:0)
如果您尝试从母版页访问内容页面控件,则需要通过相应的ContentPlaceHolder(在母版页上)访问控件。像这样的东西:
foreach (Control c in ContentPlaceHolder1.Controls)
{
Response.Write(c.ID );
}