【问题标题】:How to iterate over the controls inside an asp.net page?如何遍历 asp.net 页面中的控件?
【发布时间】:2015-07-27 06:42:31
【问题描述】:

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

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() 输入,但它说它在上下文中无效。

【问题讨论】:

标签: c# asp.net asp.net-controls


【解决方案1】:

您必须使用递归函数并将控件作为参数传递给该函数,然后该函数将遍历该控件内的控件,请参阅Loop through all controls on asp.net webpage

或者你必须将你的列表框和文本框放在一个面板中,然后循环访问该面板中的控件,如下所示:

<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";
            }
        }
    }

对您的情况的解释:control.Controls 仅获取控件内的第一级控件,因此当您调用 Page.Controls 时,它仅获取页面第一级元素上的任何服务器控件。

希望这会有所帮助...

【讨论】:

  • 这行得通,我现在明白为什么我的版本没有了 :) 谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多