如何在部分回发后保持Ajax TabContainer的tabpanel中滚动条的位置?到目前为止,我尝试了以下脚本,但它不会检索位置。
<script type="text/javascript">
var xPos, yPos;
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args) {
xPos = $get('<%=InputTabPanel.ClientID%>').scrollLeft;
yPos = $get('<%=InputTabPanel.ClientID%>').scrollTop;
}
function EndRequestHandler(sender, args) {
$get('<%=InputTabPanel.ClientID%>').scrollLeft = xPos;
$get('<%=InputTabPanel.ClientID%>').scrollTop = yPos;
}
</script>
答案 0 :(得分:1)
您可以在&lt;%@ Page%&gt;上包含MaintainScrollPositionOnPostback指令,像这样:
<%@ Page Language="C#" MaintainScrollPositionOnPostback="true" %>
有了这个,javascript就是由ASP.NET自动生成的。但是,如果您的控件被包装到UpdatePanel中,则没有理由进行完整的回发并因此失去位置。
答案 1 :(得分:0)
这确实有效,只要您设置CombineScripts = True脚本控件属性,并且在使用内容页面时将脚本或引用放在BodyContent中的脚本文件中。见下文......
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
...move script at the top of the BodyContent area
</asp:Content
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<script src="Scripts/site.js" type="text/javascript"></script>
<div>
...markup
</div>
</asp:Content>
以下是我的site.js文件
//-------------------------------------------------------//
// Maintain scroll position in given element or control
//------------------------------------------------------//
var xInputPanel, yInputPanel;
var xProductPanel, yProductPanel;
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args) {
yInputPanel = $get ('MainContent_Panel1').scrollTop;
yProductPanel = $get('MainContent_Panel2').scrollTop;
}
function EndRequestHandler(sender, args) {
$get('MainContent_Panel1').scrollTop = yInputPanel;
$get('MainContent_Panel2').scrollTop = yProductPanel;
}
注意:如果不将js脚本移动到BodyContent中,则可能会收到错误“Microsoft JScript运行时错误:'Sys'未定义”。脚本需要在ScriptManager之后运行。