タブクライアントサイドを閉じるためのAjax Control Toolkitカスタムタブのエクステンダ

StackOverflow https://stackoverflow.com/questions/3292366

質問

Ajax Control Toolkit TabPanelを変更できるAjax Control Extenderを作成しようとしているので、Cliencedをクリックすると、クライアントサイドスクリプトを使用してタブヘッダーを非表示にします(ポストバックなしで)。 )。タブが閉じられたときにも呼ばれるOnClientClose関数を指定できるようになりたいです。

私はASP制御エクステンダに新しい、そしてこれまでのところ、私は[チュートリアル]( http://www.asp.net/ajax/tutorials/creating-a-custom-ajax-control-toolkit-control-extender-cs <カスタムエクステンダを作成するためのASP.NETサイトで、「カスタムAJAXコントロールツールキットコントロールエクステンダの作成」)を参照してください。私は私のExtenderをTabPanelと呼びました、そして私のExtenderプロジェクトはビルドされます。私はそのようなテストWebページを設定しました:

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" />
<asp:TabContainer ID="TabContainer1" runat="server">
    <asp:TabPanel ID="TabPanel0" runat="server">
        <HeaderTemplate>Tab 0</HeaderTemplate>
        <ContentTemplate>Hello!</ContentTemplate>
    </asp:TabPanel>
    <asp:TabPanel ID="TabPanel1" runat="server">
        <HeaderTemplate>Tab 1</HeaderTemplate>
        <ContentTemplate>Goodbye!</ContentTemplate>
    </asp:TabPanel>
</asp:TabContainer>
<cc1:ClosableTabPanelExtender ID="ClosableTabPanelExtender1" runat="server" 
    TargetControlID="TabPanel1" />
.

これまでのところ、私がウェブサイトを実行すると、次のようなエラーが発生しています。
ClosableTabPanelExtender
エラーはThe TargetControlID of 'ClosableTabPanelExtender1' is not valid. A control with ID 'TabPanel1' could not be found.を拡張できないと思いますので、代わりにTabPanelを拡張する必要がありますか?

エラーとは別に、特に行動スクリプトではある方向を使うことができました。それは私にとって最もとらえどころのない部分ですが、私はそれが私が追加しようとしているほとんどの機能を収容するでしょう。また、エクステンダの他の部分がどのように協力してどのように機能するかもわかりません。

Ajaxツールキットのソースコードを持っており、タブコントロールのソースを見て、部分的に理解しています。私はまた、主に Matt Berseth's extenders とDan Wahlinからのもの。

役に立ちましたか?

解決

私はやっと私が必要なものを考え出した。解決策に興味がある人のために:

  • TabPanelコントロールを拡張するために、私のExtenderのサーバーコード(OnResolveControlID)でClosableTabPanelExtender.csメソッドをオーバーライドすることによって投稿したエラーを回避しなければなりませんでした。

    protected override void OnResolveControlID(ResolveControlEventArgs e)
    {
        // Get a reference to the outermost TabContainer that contains the TabPanel being extended.
        TabContainer tabContainer = (TabContainer)base.FindControl(OuterTabPanelID);
        if (tabContainer != null)
        {
            // Check to see if any of the tabs are the control we are looking form.
            foreach (TabPanel tab in tabContainer.Tabs)
            {
                if (tab.ID == e.ControlID)
                {
                    e.Control = tab;
                    return;
                }
            }
            // If none of the tabs are what we are looking for, search the contents of each tab.
            foreach (TabPanel tab in tabContainer.Tabs)
            {
                Control ctrl = tab.FindControl(e.ControlID);
                if (ctrl != null)
                    return;
            }
        }
    }
    
  • extenderのクライアント側の動作スクリプト(およびサーバーとクライアントコードの間の対話、このMSDNページは役に立ち、あなたにたくさんのトラブルを保存します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top