我尝试在用户选择“提交”按钮后清除/重置页面上的所有文本框和下拉控件。我想以编程方式执行此操作,这样如果稍后添加/删除其他控件,它仍可正常工作。
我得到了这个,其中一部分是我从另一个类似的答案中借用的:
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,因此它不会重置页面上的任何内容。有人能告诉我我遗漏了什么吗?
问题是,页面的控件属于、、
LiteralControl
类型,并且和控件是页面中其他控件内的控件,而不是页面的直接子控件。例如,如果您有一个表单,并且表单内有文本框和下拉列表,但它们嵌入在表单中,表单嵌入在页面中,那么您要搜索的和控件不是页面的控件,而是页面控件的控件。因此,您需要在控件中进行深度搜索。如果我正确地认为控件中没有循环(自 2017 年以来我一直没有在 WebForms .NET 中工作,所以至少可以说我没有最新的记忆),那么类似这样的操作应该有效:HTMLHead
HTMLForm
TextBox
DropDownList
DropDownList
TextBox
你最初通过以下方式调用它
ResetAllControls(this.Controls);
如果此操作一直运行或引发 stackoverflow 异常,则说明您的控件之间存在循环,您需要进一步验证,而不仅仅是
else
第三种情况。如果此操作对您有用,请告诉我。