Reset scroll position after Async postback - ASP.NET

前端 未结 8 1383
花落未央
花落未央 2020-11-30 06:08

What is the best way to reset the scroll position to the top of page after the an asynchronous postback?

The asynchronous postback is initiated from a ASP.NET Grid

相关标签:
8条回答
  • 2020-11-30 06:38

    Here is the perfect solution to reset scroll bar position to TOP in AJAX

    Client Side Code

    function ResetScrollPosition()
    {
        setTimeout("window.scrollTo(0,0)", 0);
    }
    

    Server Side Code

    ScriptManager.RegisterStartupScript(Page, this.GetType(), "ScrollPage", "ResetScrollPosition();", true);
    

    Only,window.scrollTo(0,0) will not work. Ajax will take precedence in this case so you have to use setTimeout function with that.

    0 讨论(0)
  • 2020-11-30 06:47
    Page.RegisterStartupScript("MyScript", "<script language=javascript>setTimeout('window.scrollTo(0,0)', 0);</script>");
    

    Put the above to the function that you want to tell to go to the top of page. Like when the page is not valid, have that there and it will add temporary javascript to shoot you to the top of the page.

    0 讨论(0)
  • 2020-11-30 06:49

    Here is the following solution I developed based on this source

    ASP.NET Webform

    <script language="javascript" type="text/javascript">
       function SetScrollEvent() {
          window.scrollTo(0,0);
       }
    </script> 
    
    <asp:GridView id="MyGridView" runat="server" OnRowDataBound="MyGridView_OnRowDataBound">
        <Columns>
            <asp:CommandField ButtonType="Link" ShowEditButton="true" />
        </Columns>
    </asp:GridView>
    

    ASP.NET Webform code behind

    protected void MyGridView_OnRowDataBound(object sender, GridViewRowEventArgs e)
    {
        if(e.Row.RowType.Equals(DataControlRowType.DataRow))
        {
            foreach (DataControlFieldCell cell in e.Row.Cells)
            {
                foreach(Control control in cell.Controls)
                {
                    LinkButton lb = control as LinkButton;
    
                    if (lb != null && lb.CommandName == "Edit")
                        lb.Attributes.Add("onclick", "SetScrollEvent();");
                }
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-30 06:50

    Are you using asp.net AJAX? If so there are two very useful events in the client libraries beginRequest and endRequest, one of the problems with partial/async postbacks, is that the general page hasnt got a clue what you are doing. the begin and endrequest events will allow you to maintain scroll position at the client, you could have a var in js that is set to the scroll position on beginrequest, then on end request you can reset whichever element's scrollTop you require.. i'm sure ive seen this done before but cant find a link. ill post if i find an example

    0 讨论(0)
  • 2020-11-30 06:56

    taken from this tutorial:

    http://aspnet.4guysfromrolla.com/articles/111407-1.aspx

    We set MaintainScrollPositionOnPostback=true

    Then if we need to reset scroll position call the method:

    Private Sub ResetScrollPosition()
    If Not ClientScript.IsClientScriptBlockRegistered(Me.GetType(), "CreateResetScrollPosition") Then
       'Create the ResetScrollPosition() function
       ClientScript.RegisterClientScriptBlock(Me.GetType(), "CreateResetScrollPosition", _
                        "function ResetScrollPosition() {" & vbCrLf & _
                        " var scrollX = document.getElementById('__SCROLLPOSITIONX');" & vbCrLf & _
                        " var scrollY = document.getElementById('__SCROLLPOSITIONY');" & vbCrLf & _
                        " if (scrollX && scrollY) {" & vbCrLf & _
                        "    scrollX.value = 0;" & vbCrLf & _
                        "    scrollY.value = 0;" & vbCrLf & _
                        " }" & vbCrLf & _
                        "}", True)
    
       'Add the call to the ResetScrollPosition() function
       ClientScript.RegisterStartupScript(Me.GetType(), "CallResetScrollPosition", "ResetScrollPosition();", True)
    End If
    End Sub 
    
    0 讨论(0)
  • 2020-11-30 06:57

    Have you set the page property MaintainScrollPosition? Not sure if that would be any different if you do an Async Postback or not.

    Edit: One thing you could attempt is to set focus on a particular item near the top of your page, that may help and be a dirty work around.

    0 讨论(0)
提交回复
热议问题