it-swarm.com.ru

ASP.net Postback - прокрутить до определенной позиции

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

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

txtField.Focus()

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

Я пробовал настройку

Page.MaintainScrollPositionOnPostback = false;

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

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

22
Dismissile

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

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

29
Theomax

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

ClientScript.RegisterStartupScript(this.GetType(), "hash", "location.hash = '#MOVEHERE';", true);
28
dvdmn

В вашем случае я предлагаю вам оставить значение по умолчанию 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

7
Matthieu Charbonnier

попробуй это

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
Rana

Эта прокрутка автоматически приводит к нужному элементу Div в элементе управления asp.net Это Functionпозвоните с него, где вы хотите , А также загрузите файл сценария Java.

OnClientClick = "return scrollGrid ()"

функция scrollGrid1 () { $ ( 'HTML, тело'). Анимировать ( { scrollTop: $ ('# Div1'). offset (). top }, 'slow' ) }

0
Suraj

Я имею 

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

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

Page.SetFocus(mvAriza.ClientID);

Работает отлично.

0
Hysen

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

0
Mike S.

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

" 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
Michael Freidgeim