1

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 は期待どおりに動作し、問題なく任意のタブを選択できます。ただし、実際のプロジェクトでは、これは解決策にはなりません。ユーザー入力に基づいてタブを追加/削除するため、コントロールに加えられたすべての変更のログを保持しない限り、ページが読み込まれるたびにそれらの変更を読み込むことができません。

4

1 に答える 1

0

ページの読み込みによって、ページはすでにビューステートとともに構築されているため、ページの init または pre init でコードを実行する必要があります。

于 2010-12-19T18:27:36.040 に答える