如果标题看起来很荒谬,我会提前道歉。我试图在我陷入困境的情况下理解两者的答案。我在按钮点击时动态创建用户控件,同时跟踪viewstate中的计数。以下是代码:
private int custControlCountID;
public int CustControlCountID
{
get
{
return (int)(ViewState["CustControlCountID"] == null? 1 : ViewState["CustControlCountID"]);
}
set
{
ViewState["CustControlCountID"] = value;
}
}
protected void Page_Init(object sender, EventArgs e)
{
for (int i = 0; i < CustControlCountID; i++)
{
RejRow customControl = (RejRow )LoadControl("~/RejRow .ascx");
customControl.ID = "rejRow" + i;
divHolder.Controls.Add(customControl);
}
}
protected void btnNewRow_Click(object sender, EventArgs e)
{
CustControlCountID = CustControlCountID + 1;
RejRow customControl = (RejRow)LoadControl("~/RejRow.ascx");
customControl.ID = "rejectRow" + CustControlCountID;
divHolder.Controls.Add(customControl);
}
我只分享了相关代码。单击按钮控件成功添加但仅一次。这是因为在Page_Init上,CustControlCountID始终设置为1。 我已经知道在Page_Init之后调用LoadViewState,因此我设置的值在Page_Init中不可用。我还了解到在构建控件层次结构期间要在Page_Init中添加的控件。请帮我理解这一点。
答案 0 :(得分:1)
理论表明,当Page_init和Page_load之间加载ViewState
时,在Page_init期间获得的值不是来自加载的视图状态,如果设置它,它可能会在框架时被覆盖实际上在页面生命周期的下一步中加载它。
您可以尝试通过覆盖CreateChildControls
方法来加载控件。