2010-08-03 2 views
1

Я использую AjaxControlToolkit версии 4.1.40412.0, .NET 4.0, VS2010AJAXControlToolkit TabContainer - ошибка при динамическом добавлении/удалении вкладок?

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

Примечание: Если закомментировать Msgstr "Если Not Page.IsPostBack Then", то есть запустите код u При каждой загрузке страницы таблоконтейнер работает как ожидалось - я могу выбрать любую вкладку без проблем. В моем реальном проекте это решение не может быть решением - я буду добавлять/удалять вкладки на основе ввода пользователем, поэтому, если я не буду вести журнал всех изменений, внесенных в элемент управления, я не могу загружать эти изменения каждый раз, когда загружается страница.

ответ

0

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

Смежные вопросы