2011-02-18 55 views
1

如何在部分回发后保持滚动条在Ajax TabContainer Tabpanel中的位置?到目前为止,我尝试了以下脚本,但它不会检索位置。在Postback后在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

如果您不更新TabContainer的外部UpdatePanel,而是从TabPanel更新滚动条,则不应该移动滚动条。 – 2011-02-18 20:58:48

回答

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; 
} 

注意:您可能会收到错误“Microsoft JScript运行错误:'Sys系统未定义”如果你不”将js脚本移动到BodyContent中。脚本需要在ScriptManager之后运行。

1

可以包括MaintainScrollPositionOnPostback上<%@页%>指令,如:

<%@ Page Language="C#" MaintainScrollPositionOnPostback="true" %> 

有了这个,JavaScript是自动由ASP.NET生成。但是,如果将您的控件包装到UpdatePanel中,则没有理由发生完整的回发并因此丢失位置。