【问题标题】:Maintain scroll position when update panel is in master page更新面板位于母版页时保持滚动位置
【发布时间】:2013-05-25 23:38:57
【问题描述】:

我在母版页中放置了脚本管理器和更新面板。

            <div id="nav">
               <asp:ScriptManager ID="ScriptManager1" runat="server"/>
            </div>
            <div id="mainchild">
            <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:ContentPlaceHolder ID="HdrContentPlaceholderBody" runat="server">
                    </asp:ContentPlaceHolder>
                </ContentTemplate>
            </asp:UpdatePanel>
        </div>

所以这个 div 在母版页中,而我的子页在面板内放置了一个网格视图。

      <asp:Content ID="pagecontent" ContentPlaceHolderID="HdrContentPlaceholderBody" runat="server">
           <asp:Panel ID="pnlAssignRole" runat="server" CssClass="popuppnl" Visible="false">
             <div class="close-image">
               <asp:ImageButton ID="ImageButton2" ToolTip="Close" runat="server" ImageUrl="~/App_Themes/Images/Close1.png" OnClick="btnAsgnCancel_Click" />
            </div>
            <table width="100%">
                <tr>
                    <td>
                        <div style="height: 600px; overflow: auto;">
                            <asp:GridView ID="grdEmpAssigned">
                            gridview content
                            </GridView>
                        </div>
                    </td>
                </tr>
            </table>
        </asp:Content>

在 rowcommand 上的 gridview 中,它会导致部分回发,我尝试将这段 javascript 放在更新面板下方以及母版页和内容页面中的 scriptmanager 下方,但没有帮助..我想我没有找到放置的地方这个javascript

      <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) {
                        try {
                            yPos = $get('ctl00_MainContent_scroll').scrollTop;
                            }
                        catch (err) { }
                    }
                    function EndRequestHandler(sender, args) {
                        try {
                            $get('ctl00_MainContent_scroll').scrollTop = yPos;
                            }
                        catch (err) { }
                    }
         </script>

请指导我。

【问题讨论】:

    标签: asp.net updatepanel partial-postback


    【解决方案1】:

    请浏览此链接。那可能对你有帮助。 http://dotnetcrunch.wordpress.com/2011/08/05/maintain-scroll-position-for-the-whole-page-after-asynchronous-postback/

    这是来自上述链接的代码。把它放在网站的标题部分。

    <script type=”text/javascript”>
         var xPos, yPos;
         Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
         Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(EndRequestHandler);
    
         function BeginRequestHandler(sender, args) {
             xPos = document.body.scrollLeft;
             yPos = documnet.body.scrollTop;
         }
    
         function EndRequestHandler(sender, args) {
             document.body.scrollLeft = xPos;
             document.body.scrollTop = yPos;
         }
    </script>
    

    【讨论】:

    • 像魅力一样工作! @Jalpesh 我建议从网站添加代码,以防网站出现故障。
    • 如果我可以加上我的两分钱。我一直在努力解决这个问题,但它没有用。我的页面不仅有一个更新面板,而且还使用了 Masterpage。母版页上有脚本管理器。但直到我最后将 javascript 放在更新面板中,它才起作用。
    最近更新 更多