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 に到達すると、そこにコントロールが表示されないため、それらのコントロールはクリアされません。皮肉なことに、まったく同じことについて投稿した人を見つけました。なぜ runat=server を div タグに追加すると、コントロール コレクションで 'System.Web.HttpException 型の例外がスローされるのですか? しかし、本当の解決策や説明がないまま、スレッドは終了します。
完全な例外は次のとおりです。
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 にする必要がある他の要件があります (長い話))。