0

ajaxタブを動的に作成し、それらのIDをセッションに保存しようとしています。「指定された引数が有効な値の範囲外でした。パラメータ名:値」というエラーが発生します。クリックボタンイベントを呼び出すことで、最初のタブを作成できます。ボタンをクリックして、2回目の試行で同じイベントを呼び出すと、エラーが発生します。定義されていない、またはセッションに含まれていないタブIDまたはcontainer \ 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); 

    }
4

1 に答える 1

0

これを達成するために別のアプローチを試みました。静的タブを作成し、それらが使用されているかどうかに応じて、表示される true/false に設定しました。動的タブを機能させることができませんでした。このアプローチでは、顧客数を 15 オーダーに制限する必要がありました。

Ajax タブ内でデータをグリッドビューにバインドするのは非常に簡単であることがわかりました。もちろん、スクリプト マネージャーの ajax リファレンスを asp ページで宣言し、ajax リファレンスを web.config ファイルに更新する必要がありました。また、既存のスタイル シートに 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# コード。

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