【发布时间】:2012-04-11 15:03:46
【问题描述】:
我有一个 div 是 runat="server"。 div 包含在面板中,并且 div 中包含一些控件。当我运行“ClearControlsInPanel()”方法时,div 之外(但在面板内)的所有控件都被清除,如下所示:
public static void ClearControlsInPanel(Panel paneltoclear, string[] ignorelist)
{
foreach (Control c1 in paneltoclear.Controls)
{
if (c1 is TextBox)
{
if (!ignorelist.Contains(c1.ID.ToString()))
{
((TextBox)c1).Text = "";
}
}
if (c1 is DropDownList)
{
if (!ignorelist.Contains(c1.ID.ToString()))
{
((DropDownList)c1).SelectedIndex = 0;
}
}
//etc.
}
}
一旦到达 div,我就看不到其中的控件,因此这些控件都不会被清除。具有讽刺意味的是,我发现一个人发了一篇关于完全相同同样事情的帖子,Why adding runat=server to a div tag throws an exception of type 'System.Web.HttpException in controls collection? 但是线程结束了,没有真正的解决方案或解释。
完整的例外是:
base {System.Web.UI.HtmlControls.HtmlContainerControl} = {InnerText =
'((System.Web.UI.HtmlControls.HtmlContainerControl)
(((System.Web.UI.HtmlControls.HtmlGenericControl)(paneltoclear.Controls._controls
[165])))).InnerText' threw an exception of type 'System.Web.HttpException'}
请假设这必须是一个运行服务器 div,并且不能更改为面板。 (我几乎可以肯定将其更改为面板会解决它,但我们还有其他要求需要它成为 runat 服务器 div(长话短说)。
【问题讨论】:
-
您发布的代码都没有显示您访问 HtmlGeneticControl 的位置,没有代码它不会很有帮助。
-
@Lloyd 就是这样,我没有从我编写的任何代码中访问任何 HtmlGenericControl。它在上述 foreach 上失败(paneltoclear.Controls 中的控制 c1)。我可以发布的唯一其他内容是 .aspx 页面中的实际 div 本身,你已经写了“一旦到达 div,我就看不到其中的控件,因此这些控件都不会被清除。”您使用什么代码来清除 div 内的控件?这个方法,ClearControlsInPanel。 foreach 循环遍历面板中的每个控件,并将其设置为“”、未选中、selectedindex = 0 等。问题是,当它遇到一个 div 控件时,它会抛出该异常,并且 foreach 循环没有得到到 div 中的任何控件。哇,投反对票?真的?我很想知道为什么。
标签: c# asp.net webforms runatserver controlcollection