Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在运行时添加和删除用户控件,选择时应覆盖上一个控件_C#_Asp.net - Fatal编程技术网

C# 在运行时添加和删除用户控件,选择时应覆盖上一个控件

C# 在运行时添加和删除用户控件,选择时应覆盖上一个控件,c#,asp.net,C#,Asp.net,我在.aspx页面上有一个占位符控件和一个下拉列表,用于选择用户控件并将其添加到占位符: if (dropdown.SelectedValue == "1") { UserControl UC = (UserControl)LoadControl("usercontrolpath"); placeholder.Controls.Add(UC); } 我对该用户控件执行所有操作(通过在每次回发时重新创建),现在我

我在.aspx页面上有一个占位符控件和一个下拉列表,用于选择用户控件并将其添加到占位符:

 if (dropdown.SelectedValue == "1")
        {
            UserControl UC = (UserControl)LoadControl("usercontrolpath");
            placeholder.Controls.Add(UC);

        }
我对该用户控件执行所有操作(通过在每次回发时重新创建),现在我希望当用户从下拉列表中选择其他选项时,比如:

 if (dropdown.SelectedValue == "2")
        {
            UserControl UC = (UserControl)LoadControl("Newusercontrolpath");
            placeholder.Controls.Add(UC);

        }
然后第一个用户控件应该被这个新的用户控件覆盖(旧的用户控件应该从页面消失)。如果我这样做

在下拉列表中选定的索引更改处,然后添加新的用户控件,然后在将新控件添加到占位符时,我将得到一个索引越界错误

我如何才能做到这一点? 如果需要更多信息,请告诉我。

您可以先使用:


您不能使用
Remove(UC)
,因为它试图删除尚未添加的新用户控件。

@Netnetter:回发时在哪里重新创建控件?您必须在
Page\u Init
Page\u Load
中(最新)执行此操作。然后在
DropDownList
SelectedIndexChanged
事件中添加新控件。我在页面加载时执行此操作,就像在页面加载时重新创建=>SelectedIndexChanged=>clear()=>add()@Netnetter:我很困惑,因为
控件都不存在。清除
控件。移除
即使控件不存在也会引发该异常。因此,原因必须是您没有显示的其他地方。错误不是在Clear()或Remove()处抛出,而是在Clear()或Remove()成功执行后,在新用户控件的Add()处抛出。
placeholder.Controls.remove(UC);
placeholder.Controls.Clear();
placeholder.Controls.Add(UC);