在回发后在Ajax TabContainer的选项卡面板中维护滚动条位置

时间:2011-02-18 20:52:27

标签: asp.net .net ajax

如何在部分回发后保持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>

2 个答案:

答案 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之后运行。