2011-12-10 83 views
0

當我點擊「添加標籤」按鈕時,服務器端代碼(tabs.ActiveTabIndex+=1)更改標籤,但標籤看起來是空的。如果我點擊來回,我可以看到用戶控件呈現。我錯過了什麼嗎?用戶控件不能在AJAX控件工具包中呈現TabContainer控件

<ajaxToolkit:TabContainer ID="TabContainer1" runat="server" Height="90%" Width="100%" 
     ActiveTabIndex="0" OnDemand="true" AutoPostBack="false" TabStripPlacement="Top" 
     CssClass="ajax__tab_xp" ScrollBars="None" UseVerticalStripPlacement="false" VerticalStripWidth="120px"> 
     <ajaxToolkit:TabPanel ID="tab1" runat="server" HeaderText="1"> 
      <ContentTemplate> 
       <uc:UCCommSubmit ID="ucCommInfo" runat="server" /> 
      </ContentTemplate> 
     </ajaxToolkit:TabPanel> 
     <ajaxToolkit:TabPanel ID="TabPanel1" runat="server" HeaderText="" Visible="false"> 
      <ContentTemplate> 
       <uc:UCCommSubmit ID="UCCommSubmit1" runat="server" /> 
      </ContentTemplate> 
     </ajaxToolkit:TabPanel> 
     <ajaxToolkit:TabPanel ID="TabPanel2" runat="server" HeaderText="" Visible="false"> 
      <ContentTemplate> 
       <uc:UCCommSubmit ID="UCCommSubmit2" runat="server" /> 
      </ContentTemplate> 
     </ajaxToolkit:TabPanel> 
    </ajaxToolkit:TabContainer> 
    <div style="padding-right: 20px; float: right"> 
     <asp:Button ID="btnNext" runat="server" Text="Add Tab" 
      onclick="btnNext_Click" /> 
    </div> 


protected void btnNext_Click(object sender, EventArgs e) 
    { 
     if (TabContainer1.Tabs.Count > TabContainer1.ActiveTabIndex + 1) 
     { 
      TabContainer1.Tabs[TabContainer1.ActiveTabIndex + 1].HeaderText = (TabContainer1.ActiveTabIndex + 1).ToString(); 
      TabContainer1.Tabs[TabContainer1.ActiveTabIndex+1].Visible = true; 
      TabContainer1.ActiveTabIndex += 1; 
     } 
    } 

回答

0

我不確定這是否相關,但幾個月前我有類似的問題。這裏是一個links to forums.asp.net包含詳細信息上這樣回答:https://stackoverflow.com/a/6307930/284240

它也能夠通過變更從代碼隱藏的ActiveTabIndex沒有觸發ActiveTabChanged事件TabContainer引起的。

嘗試使用這個JavaScript您的按鈕,導致在TabContainer的功能onclick來觸發這個事件:

function changeActiveTab(tabContainerID,tabIndex){ 
    var ctrl = $find(tabContainerID); 
    ctrl.set_activeTab(ctrl.get_tabs()[tabIndex]); 
} 

然後你就可以處理該事件,並改變你的用戶控件(並在必要時更新的UpdatePanel的知名度)。

我只注意到我回答another similar question here on SO

你試過從代碼隱藏或ASPX設置ActiveTab-屬性(從代碼隱藏)或ActiveTabIndex?

你也可以檢查是否正常工作,如果你明確地將顯示器設置爲可見:

ActiveTabIndex="0" style="display:block;visibility:visible;" 

您確保Ajax庫加載正確?你的TabContainer裏面有其他的Ajax控件嗎?檢查該頁面中的所有html是否有效。

您是使用最新的AjaxToolkit和ToolkitScriptManager代替ScriptManger嗎?

+0

謝謝蒂姆,非常徹底的步驟,我很感激。首先,出於某種原因,我似乎無法從前端訪問標籤,上面的JavaScript給我定義了set_activeTab函數!然後我試圖將autopostback設置爲true,這似乎解決了問題,然後我將scriptmanager更改爲toolkitscript管理器,然後我嘗試將autopostback設置爲false我得到了用戶控件來渲染就好... automagically! :) – nolimit