我使用的是页面上的多个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的标准行为? 我怎样才能摆脱它?
下面放置合适的剧本后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>
尝试了这一点。 它帮助我:
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.. )
这是一个古老的线程,但它从来没有得到解决 - 在这里或在任何我发现其他线程 - 和我有同样的问题。
我固定它通过将我的javascript在本体元件: onload="scrollTo(0,0);"
您可以将焦点设置服务器端,以避免周围的页面跳跃。
在Page_Load中试试这个:
PageUtility.SetFocus(foo);
另外,请检查您是否要设置Page.MaintainScrollPositionOnPostback。
让我知道是否有帮助。
UPDATE - 你可以简单地调用任何你想要控制处于焦点默认.Focus()。
例如:YourControlToFocus.Focus()
我有一个类似的问题,但是我发现了更简单的解决方案。
在这种情况下,你使用:
<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。
这个对我有用! 我希望我可以帮助别人!
请享用