AJAXControlToolkit TabContainer - 动态添加/删除标签的错误?

时间:2010-08-03 21:45:26

标签: ajaxcontroltoolkit tabcontainer

我正在使用AjaxControlToolkit版本4.1.40412.0,.NET 4.0,VS2010

使用TabContainer控件我想动态添加/删除选项卡,但看起来我的所有动态更改都不是持久性的。这是我的场景:我开始使用带有1个tabpanel的tabcontainer(硬编码,即在设计时添加),然后动态地添加更多tabpanel并隐藏原始tabpanel(运行时)。正如预期的那样,我只看到页面上的新tabpanels,但是每当我尝试选择不同的选项卡时,整个控件都会恢复到其设计时状态,即只显示原始的tabpanel,它应该已经消失,而新的tabpanels无处可寻。我错过了什么?我想作为一种解决方法,我可以在设计时添加50个左右的标签,然后动态隐藏/显示而不是删除/添加,但这看起来很笨重,草率和不必要。

如果您想复制问题,请输入以下代码:

ASPX

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"/>
    <asp:TabContainer ID="tcMain" runat="server" AutoPostBack="true" ScrollBars="auto" >
    <asp:TabPanel ID="tbTab0" runat="server" HeaderText="Tab0"/>
    </asp:TabContainer>  
    </div>
    </form>
</body>
</html>

ASPX.VB

Public Class WebForm1
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            For i As Integer = 0 To 3
                Dim ol As New Label
                ol.Text = i.ToString
                Dim oT As New AjaxControlToolkit.TabPanel
                oT.Controls.Add(ol)
                oT.HeaderText = i.ToString
                tcMain.Tabs.Add(oT)
            Next
            For i As Integer = 1 To tcMain.Tabs.Count
                If tcMain.Tabs(tcMain.Tabs.Count - i).HeaderText = "Tab0" Then tcMain.Tabs.RemoveAt(tcMain.Tabs.Count - i)
            Next
        End If
    End Sub

End Class

注意:如果您注释掉“If Not Page.IsPostBack Then”,即在每次页面加载时运行其下的代码,tabcontainer按预期工作 - 我可以选择任何选项卡而不会出现问题。在我的真实项目中,这不是解决方案 - 我将根据用户输入添加/删除选项卡,因此除非我记录对控件所做的所有更改,否则每次加载页面时都无法加载这些更改。

1 个答案:

答案 0 :(得分:0)

您需要在init或pre init页面中运行代码,因为通过页面加载,页面已经与视图状态一起构建。