清除页面上的所有文本框和下拉控件

问题描述 投票:0回答:1

在用户选择“提交”按钮后,我试图清除/重置页面上的所有文本框和下拉控件。 我想以编程方式执行此操作,因此如果稍后添加/删除其他控件,它仍然可以工作。

我已经得到了这个,其中一部分是我从另一个类似的答案中借来的:

protected void ResetAllControls()
{
    foreach (Control c in this.Controls)
    {
        if (c is TextBox)
        {
            TextBox tb = (TextBox)c;
            if (tb != null)
            {
                tb.Text = string.Empty;
            }
        }

        if (c is DropDownList)
        {
            DropDownList ddl = (DropDownList)c;
            ddl.SelectedIndex = -1;
        }
    }
}

c 解析为 System.Web.UI.LiteralControl,并且永远不会解析为 Textbox 或 DropDownList,因此它不会重置页面上的任何内容。 有人可以告诉我我错过了什么吗?

c# controls code-behind
1个回答
0
投票

问题是页面的控件属于

LiteralControl
HTMLHead
HTMLForm
类型,并且
TextBox
DropDownList
控件是页面其他控件中的一些控件,而不是页面的直接子控件。页。例如,如果您有一个表单,并且表单内有文本框和下拉列表,但它们嵌入到表单中,并且表单嵌入到页面中,则您正在搜索的
DropDownList
TextBox
控件不会出现页面的控件,而是页面控件的控件。因此,您需要在控件中应用深度搜索。如果我认为控件中没有循环的想法是正确的(自 2017 年以来我就没有在 WebForms .NET 中工作过,所以至少可以说,我没有最新鲜的记忆),那么类似这样的事情应该有效:

protected void ResetAllControls(System.Web.UI.ControlCollection Controls currentControls)
{
    foreach (Control c in currentControls)
    {
        if (c is TextBox)
        {
            TextBox tb = (TextBox)c;
            if (tb != null)
            {
                tb.Text = string.Empty;
            }
        }

        else if (c is DropDownList)
        {
            DropDownList ddl = (DropDownList)c;
            ddl.SelectedIndex = -1;
        }

        else
        {
            ResetAllControls(c.Controls);
        }
    }
}

您最初通过

ResetAllControls(this.Controls);

来称呼它

如果它永远运行或抛出 stackoverflow 异常,那么您的控件之间存在循环,您将需要一些进一步的验证,而不仅仅是第三种情况的

else
。让我知道这是否适合您。

© www.soinside.com 2019 - 2024. All rights reserved.