近来做个项目,里面有个内容,需要组合TabStrip和MultiPage,并且是在服务器端动态给MultiPage添加PageView,在每个PageView里面添加用户控件,当用户操作选择后将改变的值保存下来到数据库。显示没啥问题,但是客户端进行提交后,发现回传到服务器的PageView全没了,当然里面的用户控件也没了,也就保存不了了。
设断点,发现回传的MultiPage下的子Controls数量为0!,一个PageView也没有了,真让人惊讶!
于是做了个简单的来测试
if(!IsPostBack)
{
    this.TabStrip1.Items.Clear();
    for(int i=0;i<3;i++)
    {
Tab tab = new Tab();
tab.ID = i.ToString();
tab.Text = i.ToString();
this.TabStrip1.Items.Add(tab);
    }
    for(int i=0;i<3;i++)
    {
PageView pv = new PageView();
pv.ID = i.ToString();
pv.EnableViewState = true;
Label lb = new Label();
lb.Text = i.ToString();
TextBox txt = new TextBox();
txt.Text = i.ToString();
pv.Controls.Add(lb);
pv.Controls.Add(txt);
this.mpage.Controls.Add(pv);
    }
}
显示还是没问题,客户端提交,设断点捕获,发现 mpage.Controls.Count = 0
还是没有PageView,查资料,有说PageView本身是个用户控件,用户控件是不保存视图状态的。于是设置了每个PageView的视图状态为true,但是现象还是没变。
实在是搞不清楚,为何会有这样的情况?又该怎样解决呢?