2

AJAX タブ コンテナーでタブの遅延読み込みを使用したいと考えています。私はそれを実装しました。しかし、私が直面している問題は、ボタンをクリックしたり、そのユーザーコントロールでイベントを発生させたりしても、発生しないことです。何も起こりません。

<asp:TabContainer runat="server" ID="TabContainerUp" 
        ActiveTabIndex="0" AutoPostBack="true" OnActiveTabChanged="TabContainerUp_ActiveTabChanged">
        <asp:TabPanel ID="tab1" runat="server">
            <HeaderTemplate>
                <img src="images/uc1.png" alt="" />
            </HeaderTemplate>
            <ContentTemplate>
                <asp:Panel ID="pnlUC1" runat="server">
                </asp:Panel>
            </ContentTemplate>
        </asp:TabPanel>
        <asp:TabPanel ID="tab2" runat="server">
            <HeaderTemplate>
                <img src="images/uc2.png" alt="" />
            </HeaderTemplate>
            <ContentTemplate>
                <asp:Panel ID="pnlUC2" runat="server">
                </asp:Panel>
            </ContentTemplate>
        </asp:TabPanel>
    </asp:TabContainer>

コードビハインド:

    protected void TabContainerUp_ActiveTabChanged(object sender, EventArgs e)
    {
        string tabName = TabContainerUp.ActiveTab.ID;
        getActiveTab(tabName);
    }

    public void getActiveTab(string tabName)
    {
        UserControl uc;
        //uc.
        switch (tabName)
        {
            case "tab1":
                pnlUC1.Controls.Clear();
                uc = Page.LoadControl("~/Controls/UC1.ascx") as UserControl;
                pnlUC1.Controls.Add(uc);
                break;
            case "tab2":
                pnlUC2.Controls.Clear();
                uc = Page.LoadControl("~/Controls/UC1.ascx") as UserControl;
                pnlUC2.Controls.Add(uc);
                break;
        }
    }
4

1 に答える 1

4

Page_Load以前と同じ ID を使用して、最新のすべてのポストバックで動的に作成されたコントロールを再作成する必要があります。したがって、これらをロードして のパネルに追加できますがActiveTabChanged、次のポストバックで で再作成する必要がありますPage_Init/Page_Load。そのため、再作成するものをどこかに保存する必要があります (fe in Session)。

しかし、私はあなたが物事を必要以上に複雑にしていると仮定していVisibleますfalse. 次に、必要に応じてコントロールの表示を切り替えるだけですActiveTabChanged

: 非表示のサーバー側 Web コントロールはクライアントにまったくレンダリングされず、ViewState保存されません。したがって、それらを宣言することに不利益はありません。

遅延読み込みは、これらのコントロールをできるだけ遅く作成することを意味するのではなく、できるだけ遅くデータバインドすることを意味します。そのため、それらを (UserControl の fe)からデータベースにバインドしないpage_loadページから必要なときに呼び出されるメソッド (ここでは からActiveTabChanged) からのみバインドしてください。BindDataそのため、 UserControl にpublic メソッドを実装できUC1

簡単な例を次に示します。

switch (tabName)
{
    case "tab1":
        UC1_1.Visible = true;
        UC1_1.BindData();
        UC1_2.Visible = false;
        break;
    case "tab2":
        UC1_1.Visible = false;
        UC1_2.Visible = true;
        UC1_2.BindData();
        break;
}

そしてあなたのUserControl

public void BindData()
{
    // put here all your databinding stuff 
    // that is in page_load now ...
}

これはおそらく ajax TabPanel の遅延読み込みに関する最良のチュートリアルです。

于 2012-06-07T11:58:08.277 に答える