页面运行初始状态:

    前台页面部分代码段:

    <cc1:TabContainer ID="tabs" runat="server" ActiveTabIndex="0" Height="200px" Width="500px" enableTabScroll="True"  >

                <cc1:TabPanel runat="server" HeaderText="首页" closable="False" ID="TabPanel1" TabIndex="0">

                    <HeaderTemplate>

                        首页

                    </HeaderTemplate>

                    <ContentTemplate>

                        <iframe src="fdsfsd" frameborder="0" height="200px" width="500px"></iframe>

                    </ContentTemplate>

                </cc1:TabPanel>

 

                <cc1:TabPanel runat="server" HeaderText="我的工作台2" closable="False" ID="TabPanel2" TabIndex="1">

                    <HeaderTemplate>

                       我的工作台2

                    </HeaderTemplate>

                    <ContentTemplate>

                        <iframe src="ggfgdf" frameborder="0" height="200px" width="500px"></iframe>

                    </ContentTemplate>

                </cc1:TabPanel>

            </cc1:TabContainer>

 

首先聊聊关于动态添加TabPanel遇到的问题:

第一种情况:

后台代码:

 

  protected void Page_Load(object sender, EventArgs e)

        {

            TabPanel tab = new TabPanel();

            tab.HeaderText = "NewTab";

            tab.TabIndex = 2;

            tab.ID = "TabPanel3";

            this.tabs.Tabs.Add(tab);

        }

  //“添加”按钮

  protected void LinkButton1_Click(object sender, EventArgs e)

        {

            TabPanel tab = new TabPanel();

            tab.HeaderText = "NewTab";

            tab.TabIndex = 3;

            tab.ID = "TabPanel4";

            this.tabs.Tabs.Add(tab);

        }

点击“添加”按钮(即实行LinkButton1_Click)报错!

解决方法:

将Page_Load中的代码放到Page_Init中,即:

 

  protected void Page_Init(object sender, EventArgs e)

        {

            TabPanel tab = new TabPanel();

            tab.HeaderText = "NewTab";

            tab.TabIndex = 2;

            tab.ID = "TabPanel3";

            this.tabs.Tabs.Add(tab);

        }

  protected void LinkButton1_Click(object sender, EventArgs e)

        {

            TabPanel tab = new TabPanel();

            tab.HeaderText = "NewTab";

            tab.TabIndex = 3;

            tab.ID = "TabPanel4";

            this.tabs.Tabs.Add(tab);

        }

这样,第一次点击“添加”按钮的时候就成功了(第二次点击的时候会报前面相同的错误)。原因是:

Page_Init事件:当页面初始化时运行,例如可以在加载控件之前检测客户端环境变量,它与Load工作方式差不多,但在Load之前运行,当网页重新加载时不会再触发这个事件。(意思就是只有第一次加载页面的时候才会加载页面)。

 

运行结果:

为什么第二次点击“添加”按钮会报错呢,下面改为动态创建(上面都是写死的):

 

  protected void Page_Load(object sender, EventArgs e)

        {

            if (!IsPostBack)

            {

                ViewState["TabIndexCount"] = 1;

            }

        }

 

 

  protected void LinkButton1_Click(object sender, EventArgs e)

        {

            ViewState["TabIndexCount"] = Convert.ToInt32(ViewState["TabIndexCount"].ToString()) + 1;

 

            TabPanel tab = new TabPanel();

            tab.HeaderText = "NewTab";

            tab.TabIndex = (short)(Convert.ToInt32(ViewState["TabIndexCount"]));

            tab.ID = "TabPanel" + (Convert.ToInt32(ViewState["TabIndexCount"]) + 1).ToString();

            this.tabs.Tabs.Add(tab);

        }

 

第一次点击对的,第二次就报错(上面提到的错误信息图)

 

原因可能是:

服务器端动态创建控件,需要保证每次请求(无论是否回发)都要执行该段代码,否则前一请求创建的就会丢失 ,

每次页面请求都生成的是一个新页面,由于前一次动态创建的控件无法维护其状态,所以会报错。

具体解决方案还没有找到,在此也想请教下大家!!!