我想根据用户选择的 DropDownList 选择在运行时动态地将用户控件添加到页面中的 PlaceHolder。像这样的东西:
protected void Page_Init(object sender, EventArgs e)
{
//get user's content selection
int contentMode;
if (!IsPostBack)
contentMode = 1;
else
contentMode = Int32.Parse(Request.Form[ddlMode.UniqueID]);
//load a user control
ContentControl ucContent = null;
switch (contentMode)
{
case 1:
ucContent = LoadControl("~/Controls/SomeContent1.ascx") as ContentControl;
break;
case 2:
ucContent = LoadControl("~/Controls/SomeContent2.ascx") as ContentControl;
break;
}
ucContent.ID = "ucContent";
phContentArea.Controls.Add(ucContent);
}
...这几乎可以工作,但在两次回发后我得到了这个:
无法加载视图状态。正在加载视图状态的控制树必须与在先前请求期间用于保存视图状态的控制树匹配。例如,当动态添加控件时,回发期间添加的控件必须与初始请求期间添加的控件的类型和位置相匹配。
...我读到的原因是第二次回发的控件与之前的回发不同。我试图通过为控件提供相同的 ID 和类型来防止这种情况,但没有骰子。两个控件:
public partial class SomeContent1 : Foo.Bases.ContentControl
{
//code
}
public partial class SomeContent2 : Foo.Bases.ContentControl
{
//code
}
我是否缺少使这项工作起作用的难题的一部分?我读过类似的问题,但建议没有成效。
谢谢