0

我正在尝试动态创建 ajax 选项卡并将其 ID 存储在会话中。我收到错误消息“指定的参数超出了有效值的范围。参数名称:值”。我可以通过调用单击按钮事件来创建第一个选项卡。当我单击按钮并在第二次尝试时调用相同的事件时......我得到了错误。似乎我正在引用会话中不再定义或包含的选项卡 ID 或容器\选项卡?

我对此进行了彻底的研究,似乎无法找到答案。任何帮助将不胜感激。

我的 asp 页面上有正确的脚本管理器和程序集引用。这是asp代码和代码片段背后的代码。

                    <div>
                    <asp:Button ID ="AddTab" Text="Add Tab" OnClick = "addTab_Click" runat="server"/>
                    <AjaxToolkit:TabContainer ID="TabContainerContent" runat="server"  Height="150px" BackColor="White"  AutoPostBack="True" 
                    OnActiveTabChanged="TabContainerContent_OnActiveTabChanged" >
                    </AjaxToolkit:TabContainer>
                    <asp:Label ID="currentTabIndex" runat="server"></asp:Label> 
                    </div>
                    </td>

代码背后

 private List<string> dynamicTabIDs;

        protected void Page_Init(Object sender, EventArgs e)
    {
        if (Session["dynamicTabIDs"] != null)
        {

            dynamicTabIDs = (List<string>)Session["dynamicTabIDs"];

            foreach (string tabID in dynamicTabIDs)
            {

                AjaxControlToolkit.TabPanel tab = new AjaxControlToolkit.TabPanel();
                tab.ID = tabID;
                tab.HeaderText = "Tab " + (TabContainerContent.Tabs.Count + 1).ToString();
                Label tabContent = new Label();
                tabContent.ID = "lbl_tab_" + TabContainerContent.Tabs.Count.ToString();
                tabContent.Text = "Tab " + (TabContainerContent.Tabs.Count + 1).ToString();
                tab.Controls.Add(tabContent);

                TabContainerContent.Tabs.Add(tab);
            }


        }//end if
        else
        {

            dynamicTabIDs = new List<string>(); 
        }

    }


     protected void Page_PreRender(object sender, EventArgs e)
     {  

     Session["dynamicTabIDs"] = dynamicTabIDs;  

        }

     protected void TabContainerContent_OnActiveTabChanged(object sender, EventArgs e)
     {

         currentTabIndex.Text = TabContainerContent.ActiveTab.ID; 

     }


    public void addTab_Click(object sender, EventArgs e)
    {

        AjaxControlToolkit.TabPanel tab = new AjaxControlToolkit.TabPanel();
        tab.ID = "tab" + Convert.ToString(TabContainerContent.Tabs.Count);
        tab.HeaderText = "Tab " + (TabContainerContent.Tabs.Count + 1).ToString();
        Label tabContent = new Label();
        tabContent.ID = "lbl_tab_" + TabContainerContent.Tabs.Count.ToString();
        tabContent.Text = "Tab " + (TabContainerContent.Tabs.Count + 1).ToString();
        tab.Controls.Add(tabContent);

        TabContainerContent.Tabs.Add(tab);

        TabContainerContent.ActiveTab = tab;

        dynamicTabIDs.Add(tab.ID); 

    }
4

1 回答 1

0

我尝试了一种不同的方法来实现这一点。我创建了静态选项卡并将它们设置为可见的真/假,这取决于它们是否被使用。我无法让动态标签工作。我确实必须使用这种方法将客户数量限制为 15 个订单。

我发现将数据绑定到 Ajax 选项卡中的网格视图非常容易。当然,您需要在 asp 页面中声明的脚本管理器 ajax 引用和对 web.config 文件的 ajax 引用更新。您还需要将 ajax css 样式添加到现有样式表中。我尝试使用单独的,但没有用。

ASP HTML

<AjaxToolkit:TabContainer ID="TabContainer1" runat="server" ActiveTabIndex="0" 
                            Visible="false" ScrollBars="Both"
                            CssClass="Tab2" Width="1326px" Height="464px" >

<AjaxToolkit:TabPanel ID="TabPanel1" runat="server" HeaderText="Empty" Enabled="true"    ScrollBars="Both" CssClass="Tab2">

<ContentTemplate>
<div style="overflow:auto;width:1287px; height: 418px;">
 <font color="white" size="1" face="Verdana">

 <asp:GridView ID="SalesOrderView1"     runat="server" BackColor="White"   BorderColor="#DEDFDE"visible="False"BorderStyle="None"      BorderWidth="1px" 
 CellPadding="4" ForeColor="Black" 
 GridLines="Vertical"     HorizontalAlign="Center">
 <AlternatingRowStyle      BackColor="White" />
 <FooterStyle BackColor="#CCCC99" />
 <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
 <PagerStyle BackColor="#F7F7DE"    ForeColor="Black" HorizontalAlign="Right" />
 <RowStyle BackColor="#F7F7DE" />
 <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
 <SortedAscendingCellStyle BackColor="#FBFBF2" />
 <SortedAscendingHeaderStyle BackColor="#848384" />
 <SortedDescendingCellStyle BackColor="#EAEAD3" />
  <SortedDescendingHeaderStyle BackColor="#575357" />
 </asp:GridView>
  </div>
  </font>
 </ContentTemplate>
   </AjaxToolkit:TabPanel>
      <AjaxToolkit:TabPanel ID="TabPanel2" runat="server" HeaderText="Empty" ScrollBars="Both" CssClass="Tab2">
 <ContentTemplate >
 </AjaxToolkit:TabContainer>

在单击按钮事件上将数据绑定到 gridview 的 C# 代码。

                        SalesOrderView1.Visible = true;
                        TabPanel1.Visible = true;
                        TabPanel1.HeaderText = Order_List[multi_order_count];
于 2012-10-03T13:57:59.340 回答