ASP.net Postback - прокрутить до определенной позиции - PullRequest
25 голосов
/ 12 июля 2011

У меня есть страница ASP.net WebForms, на которой много контента в верхней части экрана.Он имеет кнопку ссылки, которая будет отправлять обратно на страницу и показывать другой раздел страницы.Когда страница обновится, я хотел бы установить фокус и прокрутить вниз до этого раздела страницы.

Я попытался сделать

txtField.Focus()

в моем коде позади, и он установит фокус и попробуетпрокручивать там, но потом прокручивать обратно наверх.Фокус все еще на моем текстовом поле, но положение экрана находится в самом верху.Ссылка находится в верхней части экрана, который вызывает обратную передачу.Я хочу прокрутить до самого низа экрана.Он делает это кратко, а затем прокручивает обратно к вершине.

Я попытался установить

Page.MaintainScrollPositionOnPostback = false;

, но, похоже, это тоже не помогает.

Есть ликаким-то образом я могу заставить его перейти на определенную позицию?Можно ли добавить тег привязки к URL-адресу, когда я отправляю сообщение с помощью кнопки или кнопки ссылки?

Ответы [ 8 ]

30 голосов
/ 07 ноября 2013

Вы можете использовать код ниже, если у вас есть привязка для местоположения:

Page.ClientScript.RegisterStartupScript(this.GetType(), "hash", "location.hash = '#MOVEHERE';", true);
30 голосов
/ 12 июля 2011

Page.MaintainScrollPositionOnPostBack = true; должен вернуть вас в ту же позицию на экране, но вы можете использовать AJAX или SetFocus(), чтобы сфокусироваться на конкретном элементе управления после обратной передачи:

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

7 голосов
/ 30 октября 2014

В вашем случае я предлагаю вам оставить значение по умолчанию Page.MaintainScrollPositionOnPostBack и использовать функцию прокрутки чистого javascript

function scrollToDiv()
{
    document.getElementById('yourDiv').scrollIntoView();
}

И вызывать его при запуске страницы с небольшой задержкой в ​​1 мс (чистоснова javascript)

setTimeout(scrollToDiv, 1);

И, наконец, вызовите его из кода C # с помощью RegisterStartupScript (js выполняется после загрузки всей страницы):

ScriptManager.RegisterStartupScript(Page, typeof(Page), "ScrollToADiv", "setTimeout(scrollToDiv, 1);", true);

Вот так, этообойдёт любую автоматическую прокрутку asp

0 голосов
/ 20 января 2019

попробуйте

protected void Page_Load(object sender, EventArgs e)
    {
        if (Page.IsPostBack) {
            string targetId = Page.Request.Params.Get("__EVENTTARGET");
            Page.ClientScript.RegisterStartupScript(this.GetType(), "focusthis", "document.getElementById('" + targetId + "').focus()", true);

        }
    }
0 голосов
/ 11 сентября 2017

Эта прокрутка автоматически до нужного Div в Asp.net Control Это функция позвони туда, откуда хочешь а также Скачать файл скрипта Java

OnClientClick = "return scrollGrid ()"

function scrollGrid1 () { $ ( 'HTML, тело'). Анимировать ( { scrollTop: $ ('# Div1'). offset (). top }, 'медленный' ) }

0 голосов
/ 13 июня 2017

У меня есть

<asp:MultiView ID="mvAriza" runat="server">
      <asp:View ID="View14" runat="server"> 
         ............ .......
      </asp:View>
</asp:MultiView>

на странице * .aspx.И на странице * .aspx.cs нажмите кнопку.

Page.SetFocus(mvAriza.ClientID);

Отлично работает.

0 голосов
/ 16 января 2016

Я пытался Ответ Матье Шарбонье , но он не сработал, если я не добавил

" window.scrollTo = function () { };" 

как было предложено в http://gnidesign.blogspot.com.au/2011/06/how-to-maintain-page-scroll-on-postback.html

Я создал вспомогательный метод, который работает в Chrome, FireFox и IE

public static void ScrollToControl( Page page, string clientId, bool alignToTop)
 {
     //NOTE: if there are more than one call on the page, first one will take preference
     //If we want that last will take  preference, change key from MethodBase.GetCurrentMethod().Name to anchorName
     //recommended in http://gnidesign.blogspot.com.au/2011/06/how-to-maintain-page-scroll-on-postback.html              
     String script = " window.scrollTo = function () { };" + Environment.NewLine;
     script += String.Format("document.getElementById('{0}').scrollIntoView({1});" , clientId, alignToTop.JSToString());
     page.ClientScript.RegisterStartupScript(TypeForClientScript(), MethodBase.GetCurrentMethod().Name, script, true );
     //return script;
 }
 public static string JSToString(this bool bValue)
 {
     return bValue.ToString().ToLower();
 }

Использовать getElementById ('{0}'). ScrollIntoView проще, чем location.hash, поскольку вам не нужно добавлять дополнительный элемент привязки.

Параметр alignToTop очень удобно указывать, хотите ли вы показывать элемент управления вверху или внизу экрана.

0 голосов
/ 30 декабря 2012

Page.MaintainScrollPositionOnPostback = true, кажется, работает просто отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...