我有一个runat =“server”的div。 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'}
请假设这必须保留为runat服务器div,并且不能更改为面板。 (我几乎可以肯定将它更改为面板会解决它,但我们有其他要求需要这个才能成为一个runat服务器div(长篇故事))。
答案 0 :(得分:1)
无论如何,面板被渲染成div,为什么div?我认为没有要求,它很快就解决了这个问题:)
答案 1 :(得分:0)
如果您发布访问div的实际代码,则更容易。即if语句的哪个分支实际处理通用控制案例。 我猜测问题是你正在尝试设置div的innertext属性(如异常所示)。 诀窍可能是如果div控件有子节点,那么innertext属性不存在,并且任何文本在div控件的controls数组中表示为文字?
所以要清除儿童收藏品尝试类似...... 如果你做其他事情,如果
,那么也会更好 public static void ClearControlsInPanel(ControlCollection controls, string[] ignorelist)
{
foreach (Control c1 in controls)
{
if (c1 is TextBox)
{
if (!ignorelist.Contains(c1.ID.ToString()))
{
((TextBox)c1).Text = "";
}
}
else if (c1 is DropDownList)
{
if (!ignorelist.Contains(c1.ID.ToString()))
{
((DropDownList)c1).SelectedIndex = 0;
}
}
else
{
if (c1.HasControls())
{
ClearControlsInPanel(c1.Controls, ignorelist);
}
}
}
}