引用出处:http://blog.joycode.com/felix/archive/2004/10/21/36136.aspx
1
private void Page_Load(object sender, EventArgs e)
2
{
3
DropDownList ddlDynamic = new DropDownList();
4
ddlDynamic.ID = "ddlDynamic";
5
HtmlForm form1 = (HtmlForm)this.FindControl("Form1");
6
7
if (!IsPostBack)
8
{
9
ddlDynamic.Items.Add("Before");
10
}
11
form1.Controls.Add(ddlDynamic);
12
if (!IsPostBack)
13
{
14
ddlDynamic.Items.Add("After");
15
}
16
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
其中的 "Before" 的状态不会保存到 ViewState里面,因为在
SaveViewState() 方法里面会检查这个DropDownList的一个标志位,如果标志位置位,则 IsTrackingViewState 返回 true。
置位的办法是通过 TrackViewState方法,
而 TrackViewState方法是 ControlCollection.Add 方法即“form1.Controls.Add”引发的.所以如果把form1.Controls.Add 这句话放到最前面就对了。