2012-09-28 31 views
0

我試圖動態創建ajax選項卡並將其ID存儲在會話中。我收到錯誤「指定的參數超出了有效值的範圍。 參數名稱:值」。我可以通過調用點擊按鈕事件來創建第一個選項卡。當我點擊按鈕並在第二次嘗試時調用相同的事件...我得到錯誤。似乎我引用了不再定義或包含在會話中的選項卡ID或容器\選項卡?Ajax選項卡錯誤指定的參數超出了有效值的範圍。參數名稱:值

我對此進行了深入研究,似乎無法找到答案。任何幫助將不勝感激。

我在asp頁面上有正確的腳本管理器和程序集引用。這裏是asp代碼和snippet背後的代碼。

    <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); 

    } 

回答

0

我嘗試了不同的方法來accomplsih這一點。我創建了靜態選項卡,並將它們設置爲可見真/假,具體取決於它們是否被使用。我無法使動態標籤工作。採用這種方法,我必須將客戶數量限制爲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]; 
相關問題