2011-07-12 4 views
0

TabPanelsという番号のAjaxToolkit TabContainerコントロールがあります。各TabPanelには、いくつかの情報を表示するための異なるUserControlがあります。これらのUserControlsの中には、LinkBut​​tonまたはGridViewにコマンドボタンを持つものがあります。 TabContainerにはAutoPostBack="false"があります。これを維持したいのです。タブ内からのポストバック後のTabContainerのアクティブなタブの維持(AutoPostBack = 'false')

GridViewでLinkBut​​tonまたはコマンドボタンをクリックすると、予想されるイベントが発生し、コードが実行されます。しかし、ページが返されると、最初のタブが再び選択されます(ユーザーが以前に表示したタブではありません)。

私の質問は:いくつかの子コントロールがポストバックを引き起こしたときに、選択したタブを維持する方法はありますか?

いくつかの制約:

  • 私はAutoPostBackをオンにする方法がありません。これは、this questionの質問に対するリンクされた解決策がこの場合はうまくいかないことを意味します。
  • UserControlsはTabContainer/TabPanelで常に使用されるとは限りません。そのため、ソリューションではこのようなことは想定できません。
  • このコードで作業する開発者が異なる可能性があるため、ソリューションはかなり堅牢で直観的である必要があります。
+0

に次の属性を追加してください。私はリフレッシュを引き起こす私のページ上のモーダルを持っていますが、リフレッシュ時にアクティブ状態を維持するためにユーザが持っていたタブが必要です。あなたが解決策を見つけることができたなら、ここに投稿して助けてください!ありがとう! – jlg

+0

残念ながら解決策が見つかりませんでした。 – David

答えて

1

私は別のフォーラムからこれを取得しました。これをページロードで設定します。それは彼らが偽のAutoPostBack =に設定された状態で助けとなるかどうかは知りませんが、あなたはまだそれをあきらめていない場合、私はこれは私が自分自身のコントロールを作成することで、この問題を解決し

if (ViewState("ActiveTabIdx") != null) 
      { 
       activeTabIndex = Convert.ToInt32(ViewState("ActiveTabIdx")) 

       if (activeTabIndex != null) 
       { 
        TabContainer1.ActiveTabIndex = activeTabIndex; 
       } 

} 
+0

まあ、私はあなたが私があきらめたと言うことができるように仕事を変更しました:) これをテストし、それがAutoPostBack = falseで動作することを確認したら、私はこの答えを受け入れます。それ以外の場合は、後でチェックしてもかまいませんが、Visual Studioの開発環境はもう設定されていません。また、投稿へのリンクを含めると、これが素晴らしいことがわかりました。 – David

+0

http://forums.asp.net/t/1725584.aspx/1?Response+Redirect+and+keeping+tabcontainer+on+active+tab – jlg

2

役に立てば幸いそれは、このようなLoadClientState()をオーバーライド、タブコンテナから継承:

protected override void LoadClientState(string clientState) 
    { 
     base.LoadClientState(clientState); 

     // If post back was caused by control on a tab, make that tab the active one 
     if (!string.IsNullOrEmpty(this.Page.Request.Params["__EVENTTARGET"])) 
     { 
      foreach (string ctlName in this.Page.Request.Params["__EVENTTARGET"].Split('$')) 
      { 
       if (this.FindControl(ctlName) is TabPanel && this.Tabs.Contains(this.FindControl(ctlName) as TabPanel)) 
       { 
        this.ActiveTab = (this.FindControl(ctlName) as TabPanel); 
        break; 
       } 
      } 
     } 
    } 

これはポストバックを発生させる制御が存在するタブパネルを見つけ、その後、アクティブパネルことができます。

-1

タブコンテナにActiveTabChangedイベントを追加する必要があります。アクティブなタブインデックスをビューステートに維持し、ページがロードされていないかどうかを確認して、アクティブなタブインデックスとして設定します。

protected void TabContainer1_ActiveTabChanged(object sender, EventArgs e) 
    { 
     ViewState["ActiveTabIndex"] = TabContainer1.ActiveTabIndex; 

    } 

PageOnLoadイベントコード

if (!(ViewState["ActiveTabIndex"] == null)) 
     {    
       TabContainer1.ActiveTabIndex = (int)ViewState["ActiveTabIndex"];   

     } 

私は今、同じ問題を抱えているタブコンテナタグ

AutoPostBack="true" OnActiveTabChanged="TabContainer1_ActiveTabChanged" 
+0

申し訳ありませんが、問題は解決しません –

関連する問題