我正在使用 AjaxControlToolkit 版本 4.1.40412.0、.NET 4.0、VS2010
使用 TabContainer 控件我想动态添加/删除选项卡,但看起来我的所有动态更改都不是持久的。这是我的场景:我从一个带有 1 个选项卡面板(硬编码,即在设计时添加)的选项卡容器开始,然后动态添加更多选项卡面板并隐藏原始选项卡面板(运行时)。正如预期的那样,我在页面上只看到了新的选项卡,但是每当我尝试选择不同的选项卡时,整个控件都会恢复到其设计时状态,即只显示应该消失的原始选项卡和新的选项卡无处可寻。我错过了什么?我想作为一种解决方法,我可以在设计时添加 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 会按预期工作 - 我可以毫无问题地选择任何选项卡。在我的实际项目中,这不是解决方案——我将根据用户输入添加/删除选项卡,所以除非我记录对控件所做的所有更改,否则我无法在每次页面加载时加载这些更改。