一个百思不得其解的奇怪问题,求教
动态向页面加入一个下拉框:
protected void Page_Load(object sender,EventArgs e)
{
DropDownList ddl=new DropDownList ();
if (!IsPostBack) //页面第一次加载时初始化值
{
ddl.Items.Add("test1");
ddl.Items.Add("test2");
}
Form.Controls.Add(ddl); //加入表单控件树
}
然后在页面上加入一个按钮,启动页面后点击按钮,发现下拉框中的选项都消失了。但是如果加入表单控件树的代码之前就不会发生这样的问题:
protected void Page_Load(object sender,EventArgs e)
{
DropDownList ddl=new DropDownList ();
Form.Controls.Add(ddl); //加入表单控件树
if (!IsPostBack) //页面第一次加载时初始化值
{
ddl.Items.Add("test1");
ddl.Items.Add("test2");
}
}
书上说,”这是因为一旦控件被加入了页面控件树,TrackViewState()方法就会自动调用来维护控件的视图状态(这样,控件的初始化数据就能保存下来),因此,只有把初始化控件的语句放到加入表单控件树的语句之后,下拉列表框中的数据才能保留。“
可我奇怪,放在之前和之后有神马区别?回发时,Form.Controls.Add(ddl); 总是要执行的,而 if (!IsPostBack) 语句块总是不会执行的,但为嘛结果就有区别呢?