先看一个有趣的例子,我在Page_Load中动态添加了一个DropDownList控件,并为DropDownList控件动态添加一些下拉项,如下:
protected void Page_Load(object sender, EventArgs e)
{
DropDownList li = new DropDownList();
if (!IsPostBack)
{
li.Items.Add("abc");
li.Items.Add("abcd");
li.Items.Add("abcde");
}
this.form1.Controls.Add(li);
这时候,只要页面任何回发操作,li中的下拉项就会全部消失,原因是因为未为DropDownList控件启用视图跟踪监控。
要如何解决该问题呢?
1,直接开启DropDownList的视图跟踪临控,代码修改如下:
protected void Page_Load(object sender, EventArgs e)
{
DropDownList li = new DropDownList();
((IStateManager)li.Items).TrackViewState();
if (!IsPostBack)
{
li.Items.Add("abc");
li.Items.Add("abcd");
li.Items.Add("abcde");
}
this.form1.Controls.Add(li);
}
2,新添加控件,后为控件添加下拉项,代码修改如下:
protected void Page_Load(object sender, EventArgs e)
{
DropDownList li = new DropDownList();
this.form1.Controls.Add(li);
if (!IsPostBack)
{
li.Items.Add("abc");
li.Items.Add("abcd");
li.Items.Add("abcde");
}
}
有朋友要问了,为什么仅仅是换了代码的位置,就能保存控件的下拉项了呢?其实还是因为Controls.Add方法中开启了视图跟踪临控!a