6

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

4

5 回答 5

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>
于 2012-05-29T20:11:31.583 回答
0

This is an old thread, but it never got resolved – here or in any of the other threads I found – and I had the same problem.

I fixed it by putting my javascript in the body element: onload="scrollTo(0,0);"

于 2013-08-16T16:04:24.450 回答
0

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

在 Page_Load 中试试这个:

PageUtility.SetFocus(foo);

还要检查您是否正在设置 Page.MaintainScrollPositionOnPostback。

让我知道这是否有帮助。

更新 - 您可以简单地调用 .Focus() 默认情况下您想要成为焦点的任何控件。

例如:YourControlToFocus.Focus()

于 2012-05-29T10:03:54.923 回答
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"

或者

tc1.ActiveTabIndex = 2 'code behind

其中整数是您要关注的选项卡的 ID。

这个对我有用!我希望我能帮助别人!

享受

于 2014-06-16T16:09:44.697 回答
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.. )
于 2013-07-10T10:09:09.427 回答