动态控件的状态问题的分析 概括

引用出处:http://blog.joycode.com/felix/archive/2004/10/21/36136.aspx

以下代码片断:

private void Page_Load(object sender, EventArgs e)
        
{
        
            DropDownList ddlDynamic 
= new DropDownList();
            ddlDynamic.ID 
= "ddlDynamic";
            HtmlForm form1 
= (HtmlForm)this.FindControl("Form1");

            
            
if (!IsPostBack) 
            
{
                ddlDynamic.Items.Add(
"Before");
            }

            form1.Controls.Add(ddlDynamic);
            
if (!IsPostBack) 
            
{
                ddlDynamic.Items.Add(
"After");
            }

        }

其中的 "Before" 的状态不会保存到 ViewState里面,因为在
SaveViewState() 方法里面会检查这个DropDownList的一个标志位,如果标志位置位,则 IsTrackingViewState 返回 true。
置位的办法是通过 TrackViewState方法,
而 TrackViewState方法是 ControlCollection.Add 方法即“form1.Controls.Add”引发的.所以如果把form1.Controls.Add 这句话放到最前面就对了。 

原文地址:https://www.cnblogs.com/xiaotaoliang/p/389639.html