2012-05-29 5 views
6

Я использую более одного TabContainer на странице в проекте ASP.NET, и я заметил очень странное поведение: при загрузке страницы фокус переходит на последний TabContainer на странице, заставляя его прокручивать вниз. Я не обращаю внимания на какой-либо элемент управления, поэтому я не понимаю, откуда это происходит. Я также переключил места между элементами управления, и это всегда последний, который сфокусирован. В TabContainers не имеет фантазии настройки, это в основном то, что они выглядят как:AjaxToolkit: последний TabContainer на странице сфокусирован на загрузке страницы

<cc1:TabContainer ID="tabContainer" runat="server"> 
    <cc1:TabPanel runat="server" HeaderText="Header1" ID="tabPanel1" TabIndex="0"> 
     <HeaderTemplate> 
      <asp:Label ID="lblTab1" runat="server" Text="Tab1"></asp:Label> 
     </HeaderTemplate> 
     <ContentTemplate> 
      ... (anything goes here, it still doesn't work) 
     </ContentTemplate> 
    </cc1:TabPanel> 
    <cc1:TabPanel runat="server" HeaderText="Header2" ID="tabPanel2" TabIndex="1"> 
     <HeaderTemplate> 
      <asp:Label ID="lblTab2" EnableViewState="False" runat="server" Text="Tab2"></asp:Label> 
     </HeaderTemplate> 
     <ContentTemplate> 
      ... (anything goes here, it still doesn't work) 
     </ContentTemplate> 
    </cc1:TabPanel> 
</cc1:TabContainer> 

Я знаю, что может установить фокус на элемент управления, я попытался это, но страница первых свиток на вкладку контейнер, а затем возвращается к сфокусированному управлению (он выглядит не очень хорошо). Я попробовал это, чтобы установить фокус на другое управление:

<body id="main" onload="javascript:document.getElementById('lnkLogout').focus();"> 

Это стандартное поведение для TabContainer? Как я могу избавиться от него?

+0

любые решения по этому вопросу? ниже javascript ничего не меняет на моей странице .. – Emre

ответ

0

Вы можете установить фокус на стороне сервера, чтобы избежать перескакивания страницы.

Попробуйте это в Page_Load:

PageUtility.SetFocus(foo); 

Также проверьте, хотите ли вы настраиваете Page.MaintainScrollPositionOnPostback.

Дайте мне знать, если это поможет.

UPDATE - вы можете просто вызвать .Focus() для любого элемента управления, которым вы хотите быть в фокусе по умолчанию.

например: YourControlToFocus.Focus()

+0

MaintainScrollPositionOnPostback не работает. Также что такое PageUtility? : D –

+0

Я честно не помню. См. Мое обновление. – Kev

+0

это в значительной степени то, что я сделал, но мне кажется, что это обходной путь. Потому что прямо сейчас вы можете быстро увидеть страницу, переходящую в tabcontainer, а затем вернуться к началу страницы. Я пытаюсь добиться того, чтобы страница не переходила в контейнер табуляции в первую очередь. –

6

Место скрипт справа внизу после ScriptManager управления:

<script type="text/javascript"> 
    Sys.Extended.UI.TabContainer.prototype._app_onload = function (sender, e) { 
     if (this._cachedActiveTabIndex != -1) { 
      this.set_activeTabIndex(this._cachedActiveTabIndex); 
      this._cachedActiveTabIndex = -1; 

      var activeTab = this.get_tabs()[this._activeTabIndex]; 
      if (activeTab) { 
       activeTab._wasLoaded = true; 
       //activeTab._setFocus(activeTab); -- disable focus on active tab in the last TabContainer 
      } 
     } 
     this._loaded = true; 
    } 
</script> 
+0

Большое вам спасибо. Через несколько часов я разочаровался в том, что мне пришлось вернуться к предыдущей версии Toolkit. –

+1

Я получаю Sys.Extended.UI не определено. –

0

Попробуйте это. Это помогло мне:

window.Sys.Application.findComponent('<%=tabContainer.ClientID %>'); 

tabContainer.set_activeTabIndex(1); (//Here set the id of the last tab that is the index of the last tab. Index will start with 0 upto last - 1 as in array..) 
+0

tabContainer - это нуль или не объект. – pabrams

0

Это старая нить, но он никогда не был решен - здесь или в любом из других потоков, которые я нашел, - и у меня была такая же проблема.

Я установил ее, поставив мой JavaScript в элементе тела: onload="scrollTo(0,0);"

+0

Это решение не работает для меня, вместо этого я использую JavaScript в главном сообщении (javascript: document.getElementById ('lnkLogout'). Focus();). Клиенты приняли это решение. –

0

У меня была аналогичная проблема, но я нашел более простое решение.

В случае, если использовать:

<asp:toolkitscriptmanager ID="ScriptManager1" runat="server"> 
      </asp:toolkitscriptmanager> 

и более панели на вкладке контейнера (3, например):

<asp:tabcontainer runat="server" ID="tc1" ActiveTabIndex="0" > 

<asp:TabPanel runat="server" ID="TB1" Height="250" > 
<asp:TabPanel runat="server" ID="TB1" Height="250" > 
<asp:TabPanel runat="server" ID="TB1" Height="250" > 

Например, вы можете использовать свойство:

ActiveTabIndex="0" 

OR

tc1.ActiveTabIndex = 2 'code behind 

Где целое число является идентификатором вкладки, которую вы хотите сфокусировать.

Это работает для меня! Надеюсь, я могу помочь кому-то!

Наслаждайтесь

Смежные вопросы