-->

AjaxToolkit:页面上的最后一个TabContainer的重点是在页面加载(AjaxTool

2019-06-24 22:26发布

我使用的是页面上的多个TabContainer的在ASP.NET项目中,我注意到一个很奇怪的现象:当页面加载的焦点跳转到页面上的最后一个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的标准行为? 我怎样才能摆脱它?

Answer 1:

下面放置合适的剧本后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>


Answer 2:

尝试了这一点。 它帮助我:

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.. )


Answer 3:

这是一个古老的线程,但它从来没有得到解决 - 在这里或在任何我发现其他线程 - 和我有同样的问题。

我固定它通过将我的javascript在本体元件: onload="scrollTo(0,0);"



Answer 4:

您可以将焦点设置服务器端,以避免周围的页面跳跃。

在Page_Load中试试这个:

PageUtility.SetFocus(foo);

另外,请检查您是否要设置Page.MaintainScrollPositionOnPostback。

让我知道是否有帮助。

UPDATE - 你可以简单地调用任何你想要控制处于焦点默认.Focus()。

例如:YourControlToFocus.Focus()



Answer 5:

我有一个类似的问题,但是我发现了更简单的解决方案。

在这种情况下,你使用:

<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。

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

请享用



文章来源: AjaxToolkit: the last TabContainer on the page is focused on page load