0

我有一个标签容器的以下代码,我可以动态创建一个标签,但是一旦我尝试点击添加另一个标签,前一个标签就会消失,我不知道如何保持视图状态,有人可以帮忙吗我用这个。

测试5.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test5.aspx.cs" Inherits="test5" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<cc1:tabcontainer id="TabContainer1" visible="true" runat="server" Height="150px"> 
    <cc1:TabPanel ID="Tab0" runat="server" HeaderText="Step 1">
        <ContentTemplate>
            Test
            <asp:Button ID="add" Text="Add" OnClick="add_Click" runat="server" />
        </ContentTemplate>
    </cc1:TabPanel> 
</cc1:tabcontainer>  

    </div>
    </form>
</body>
</html>

test5.aspx.cs

using AjaxControlToolkit;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class test5 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void add_Click(object sender, EventArgs e)
    {
        int currentTab = TabContainer1.ActiveTabIndex;
        int nextTab = currentTab + 1;

        Button btn = new Button();
        btn.ID = "Add" + nextTab.ToString();
        btn.Text = "Add";
        btn.Click += new EventHandler(add_Click);


        TabPanel t = new TabPanel();
        t.ID = "Tab" + nextTab;
        t.HeaderText = "Tab:" + nextTab;
        t.Controls.Add(btn);
        TabContainer1.Tabs.Add(t);
    }
}
4

2 回答 2

0

我删除了我之前添加的添加,但这是我到目前为止得到的

using AjaxControlToolkit;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class test5 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (null != ViewState["NumDynamicControls"])
        {
            // There are controls that need to be re-generated
            var dynamicControlCount = int.Parse(ViewState["NumDynamicControls"].ToString());

            for (int i = 1; i <= dynamicControlCount; i++)
            {
                RenderDynamicTabs(i);
            }
        }
    }

    public void RenderDynamicTabs(int nextTab)
    {
        Button btn = new Button();
        btn.ID = "Add" + nextTab.ToString();
        btn.Text = "Add";
        btn.Click += new EventHandler(add_Click);


        TabPanel t = new TabPanel();
        t.ID = "Tab" + nextTab;
        t.HeaderText = "Tab:" + nextTab;
        t.Controls.Add(btn);
        TabContainer1.Tabs.Add(t);

    }

    protected void add_Click(object sender, EventArgs e)
    {
        int currentTab = TabContainer1.ActiveTabIndex;
        int nextTab = currentTab + 1;

        RenderDynamicTabs(nextTab);


        if (null == ViewState["NumDynamicControls"])
        {
            ViewState["NumDynamicControls"] = 0;
        }

        var dynamicControlCount = int.Parse(ViewState["NumDynamicControls"].ToString());
        dynamicControlCount = dynamicControlCount + 1;
    }
}
于 2013-07-22T17:37:57.087 回答
0

这是我要做的:

包装以下代码:

        Button btn = new Button();
        btn.ID = "Add" + nextTab.ToString();
        btn.Text = "Add";
        btn.Click += new EventHandler(add_Click);


        TabPanel t = new TabPanel();
        t.ID = "Tab" + nextTab;
        t.HeaderText = "Tab:" + nextTab;
        t.Controls.Add(btn);
        TabContainer1.Tabs.Add(t);

放入自己的方法调用RenderDynamicTabs(int nextTab)

在末尾add_Click添加以下代码:

if(null == ViewState["NumDynamicControls"])
{
    ViewState["NumDynamicControls"] = 0;
}

var dynamicControlCount = int.Parse(ViewState["NumDynamicControls"]);
dynamicControlCount++;

Page_Load中,添加以下内容:

if(null != ViewState["NumDynamicControls"])
{
    // There are controls that need to be re-generated
    var dynamicControlCount = int.Parse(ViewState["NumDynamicControls"]);

    for(int i = 1; i <= dynamicControlCount; i++)
    {
        RenderDynamicTabs(i);
    }
}

这应该在每个PostBack.

最后,为避免代码重复,在 中add_ClickRenderDynamicTabs只需调用RenderDynamicTabs(nextTab);.

于 2013-07-19T18:06:05.480 回答