2011-07-12 19 views
0

我有一个具有大量TabPanels一个AjaxToolkit TabContainer的控制。每个TabPanel都有一个不同的UserControl来显示一些信息。其中一些用户控件具有LinkBut​​ton或带有命令按钮的GridView。 TabContainer有AutoPostBack="false",这是我想保留它的方式。维护从突出部内回发后TabContainer的活动标签(带的AutoPostBack =“假”)

当您在LinkBut​​ton的或命令按钮在GridView点击预期的事件火灾和代码运行。但是当页面返回时,再次选择初始选项卡(而不是用户以前查看的选项卡)。

所以我的问题是:是否有保持选定的选项卡时,一些子控件导致回发的方法吗?

一些制约因素:

  • 我没有办法把AutoPostBack上。这意味着this question问题的链接解决方案在这种情况下不好。
  • 用户控件并不总是在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 =假,我会接受这个答案。否则,我可能会在稍后检查它,但没有设置Visual Studio开发环境。此外,如果您包含该帖子的链接,您会发现这很棒。 – David

+0

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

2

我创造我自己的控制解决了这个问题从继承TabContainer的,然后重写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; 
       } 
      } 
     } 
    } 

此发现在其上引起回发的控制驻留在的TabPanel,然后使该活性面板。

-1

你需要添加ActiveTabChanged事件标签的容器,你可以保持活跃的标签索引视图状态,并在页面加载时只检查,如果它不为空,然后将其设置为活动选项卡索引。

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

    } 

PageOnLoad事件代码

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

     } 

确保添加以下属性在TabContainer的标签

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

对不起,它不能解决问题 –