Ajax选项卡错误指定的参数超出了有效值的范围。参数名称:value

时间:2012-09-28 16:09:32

标签: ajax dynamic tabs

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

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

我的asp页面上有正确的scriptmanager和程序集引用。这是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); 

    }

1 个答案:

答案 0 :(得分:0)

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

我发现在Ajax选项卡中将数据绑定到gridview非常容易。当然,您需要在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>

C#代码,用于在点击按钮事件中将数据绑定到gridview。

                        SalesOrderView1.Visible = true;
                        TabPanel1.Visible = true;
                        TabPanel1.HeaderText = Order_List[multi_order_count];