我正在尝试加载一个控件,具体取决于从下拉列表中选择的类别ID。
这是我在switch语句中显示的代码,用于显示usercontrol。这是我知道这样做并拥有可重用视图的唯一方法。我对其他方法持开放态度,因为我读过一些人说要避免动态加载?
var control = Page.LoadControl("~/usercontrols/aCertainForm.ascx");
exampleDivArea.Controls.Add(control);
目前它在按钮点击上加载正常,调用上面的代码,但当我再次回复到同一个表单时,它会失去动态控件的状态。
提前感谢您的回答,我很感激,并希望很快我能够帮助其他人更多:)
答案 0 :(得分:1)
上面的代码需要在Page生命周期的早期运行,以便ASP.NET可以恢复它的状态。下拉列表更改事件的服务器端事件处理程序在所有状态恢复后发生,因此为时已晚。您必须将代码添加到Init或类似的地方。
(是的,这非常难看,真的打破了整个ASP.NET抽象,就像许多事情一样。抱歉: - )
答案 1 :(得分:0)
加载控件后,指定它的ID。此代码必须在初始显示和回发时运行。并确保使用的id是相同的。
以下是我在Page_Load中使用的代码:
var control = Page.LoadControl("~/usercontrols/aCertainForm.ascx");
control.id = "ACertainFormControl01";
exampleDivArea.Controls.Add(control);
if (IsPostBack)
{
do stuff
}
else
{
do stuff
}