ASP.net Postback - 滚动到特定位置

Dis*_*ile 26 c# asp.net postback webforms

我有一个ASP.net WebForms页面,屏幕顶部有很多内容.它有一个链接按钮,将回发到页面并显示页面的另一部分.当页面刷新时,我想设置焦点并向下滚动到页面的这一部分.

我试过了

txtField.Focus()
Run Code Online (Sandbox Code Playgroud)

在我的代码后面,它将设置焦点并尝试在那里滚动,但然后滚动回到顶部.焦点仍然在我的文本框上,但屏幕的位置在最顶层.链接位于屏幕顶部,导致回发.我想滚动到屏幕的最底部.它会短暂地执行此操作,然后向右滚动到顶部.

我试过设置

Page.MaintainScrollPositionOnPostback = false;
Run Code Online (Sandbox Code Playgroud)

但这似乎也没有帮助.

有什么方法可以强迫它去特定的位置吗?当我使用按钮或链接按钮回发时,是否可以在URL中添加锚标记?

The*_*max 33

Page.MaintainScrollPositionOnPostBack = true;应该让你回到屏幕上的相同位置,但是你可以使用AJAX,或者你可以SetFocus()在回发后专注于特定的控件:

http://msdn.microsoft.com/en-us/library/ms178232.aspx


dvd*_*dmn 31

如果您有该位置的锚点,则可以使用以下代码:

Page.ClientScript.RegisterStartupScript(this.GetType(), "hash", "location.hash = '#MOVEHERE';", true);
Run Code Online (Sandbox Code Playgroud)

  • @Dismissile在我看来,这应该被标记为答案.您不必从头开始重新加载页面(因此只有在发生某些回发事件时才能应用代码),并且未使用已接受的答案,并且声明与所要求的完全相反. (7认同)
  • 这对我有用,设置 Page.MaintainScrollPositionOnPostBack = false; 在特定情况下(因为我的页面通常设置为 true) (2认同)

Mat*_*ier 7

在你的情况下,我建议你保持Page.MaintainScrollPositionOnPostBack的默认值,并使用纯javascript滚动功能

function scrollToDiv()
{
    document.getElementById('yourDiv').scrollIntoView();
}
Run Code Online (Sandbox Code Playgroud)

并在页面启动时调用它,稍微延迟1ms(再次使用纯javascript)

setTimeout(scrollToDiv, 1);
Run Code Online (Sandbox Code Playgroud)

最后用后面的C#代码调用它,使用RegisterStartupScript(在加载所有页面后执行js):

ScriptManager.RegisterStartupScript(Page, typeof(Page), "ScrollToADiv", "setTimeout(scrollToDiv, 1);", true);
Run Code Online (Sandbox Code Playgroud)

像这样,它将绕过任何asp自动滚动