如何迭代 asp.net 页面内的控件?
How to iterate over the controls inside an asp.net page?
这可能是一个菜鸟问题,但我不明白为什么它不起作用。我想在用户输入新记录后清除页面内的所有表单。我在 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()
获取类型,但它说它在上下文中无效。
您要么必须使用递归函数并将控件作为参数传递给该函数,然后该函数将循环遍历该控件内的控件,请参阅 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 时,它只获取页面第一级上的任何服务器控件元素。
希望这对您有所帮助...
这可能是一个菜鸟问题,但我不明白为什么它不起作用。我想在用户输入新记录后清除页面内的所有表单。我在 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()
获取类型,但它说它在上下文中无效。
您要么必须使用递归函数并将控件作为参数传递给该函数,然后该函数将循环遍历该控件内的控件,请参阅 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 时,它只获取页面第一级上的任何服务器控件元素。
希望这对您有所帮助...