如何遍历asp.net页面中的控件

本文关键字:控件 net asp 何遍历 遍历 | 更新日期: 2023-09-27 18:05:04

这可能是一个新手问题,但我不明白为什么它不起作用。我想在用户输入新记录后清除页面内的所有表单。我在OnClick方法完成之前调用它。我的页面也没有父Master page,我只是想迭代我想要的Controls,而不是全部。这是我的代码:(我知道,如果我这样使用它,它会与下拉列表项混淆,我将改变它后,我得到了在页面中获得控件的逻辑)

public void ClearForms()
        {
            foreach (var item in Page.Controls)
            {
                if (item is TextBox)
                {
                    ((TextBox)item).Text = String.Empty;
                }
                if (item is ListItem)
                {
                    ((ListItem)item).Text = "Choose...";
                    ((ListItem)item).Value = "-1";
                }
            }
        }

程序也不进入if语句。我试着通过item.GetType()输入,但它说它在上下文中无效。

如何遍历asp.net页面中的控件

你必须使用递归函数并将控件作为参数传递给该函数,然后该函数将遍历该控件中的控件,参见循环遍历asp.net网页上的所有控件

或者你需要把列表框和文本框放在面板中然后循环遍历面板中的控件,就像这样:

<asp:Panel ID="pnl" runat="server">
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</asp:Panel>
<asp:Button ID="btnClear" runat="server" Text="Clear" OnClick="btnClear_Click" />

和后面的代码:

protected void btnClear_Click(object sender, EventArgs e)
    {
        ClearForms(pnl);
    }
    public void ClearForms(Control c)
    {
        foreach (var item in c.Controls)
        {
            if (item is TextBox)
            {
                ((TextBox)item).Text = String.Empty;
            }
            if (item is ListItem)
            {
                ((ListItem)item).Text = "Choose...";
                ((ListItem)item).Value = "-1";
            }
        }
    }

对你的情况的解释:控制。控件只获取控件内部的第一级控件,因此当调用Page。控件,它只获取页面第一层元素上的任何服务器控件。