循环浏览内容页面中的下拉列表 - VS2008

时间:2008-11-24 15:25:12

标签: c# asp.net

我有一个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";
                                }
                            }
                        }
                    }

                }

            }
        }

现在建立一个递归例程

2 个答案:

答案 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 );
}