AJAXControlToolkit TabContainer - ошибка в динамическом добавлении / удалении вкладок? - PullRequest
1 голос
/ 04 августа 2010

Я использую AjaxControlToolkit версии 4.1.40412.0, .NET 4.0, VS2010

Используя элемент управления TabContainer, я хочу динамически добавлять / удалять вкладки, но похоже, что все мои динамические изменения не являются постоянными. Вот мой сценарий: я начинаю с tabcontainer с 1 tabpanel (жестко закодированным, то есть добавленным во время разработки), затем динамически добавляю больше tabpanels и скрываю исходную tab tabel (время выполнения). Как и ожидалось, я вижу только новые вкладки на странице, однако каждый раз, когда я пытаюсь выбрать другую вкладку, весь элемент управления возвращается к своему состоянию времени разработки, то есть показывает только исходную панель вкладок, которая должна была исчезнуть, и новые вкладки нигде не найти. Что мне не хватает? Я думаю, что в качестве обходного пути я могу добавить около 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», т.е. запускаете код под ним при каждой загрузке страницы, контейнер вкладок работает как положено - я могу без проблем выбрать любую вкладку. В моем реальном проекте это не может быть решением, хотя я буду добавлять / удалять вкладки на основе пользовательского ввода, поэтому, если я не буду вести журнал всех изменений, когда-либо внесенных в элемент управления, я не смогу загружать эти изменения каждый раз, когда загружается страница.

1 Ответ

0 голосов
/ 19 декабря 2010

Вам нужно запустить свой код на странице init или pre init, потому что при загрузке страницы страница уже создается вместе с состоянием просмотра.

...