AjaxToolkit:页面上的最后一个TabContainer专注于页面加载

时间:2012-05-29 09:52:53

标签: asp.net ajaxcontroltoolkit tabcontainer

我在ASP.NET项目的页面上使用了多个TabContainer,我发现了一个非常奇怪的行为:当页面加载时,焦点会跳转到页面上的最后一个TabContainer,导致它向下滚动。我没有明确关注任何控件,所以我不明白它的来源。我也在控件之间切换位置,它总是最后一个聚焦。 TabContainers没有任何花哨的设置,这基本上就是它们的样子:

<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的标准行为吗?我怎么能摆脱它?

5 个答案:

答案 0 :(得分:7)

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>

答案 1 :(得分:0)

您可以设置焦点服务器端以避免页面跳转。

在Page_Load中尝试:

PageUtility.SetFocus(foo);

同时检查您是否正在设置Page.MaintainScrollPositionOnPostback。

如果有帮助,请告诉我。

更新 - 默认情况下,您可以在任何想要对焦的控件上调用.Focus()。

例如:YourControlToFocus.Focus()

答案 2 :(得分: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.. )

答案 3 :(得分:0)

这是一个旧线程,但它从未得到解决 - 在这里或在我发现的任何其他线程中 - 我遇到了同样的问题。

我通过将javascript放在body元素中来修复它:onload="scrollTo(0,0);"

答案 4 :(得分: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

其中整数是您要聚焦的选项卡的ID。

对我有用!我希望我可以帮助别人!

享受