Подтвердить что ты не робот

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

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

Я пробовал делать

txtField.Focus()

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

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

Page.MaintainScrollPositionOnPostback = false;

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

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

setTimeout(scrollToDiv, 1);

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

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

Подобно этому, он будет обходить любую автоматическую прокрутку asp

Ответ 4

Page.MaintainScrollPositionOnPostback = true, кажется, работает нормально.

Ответ 5

Я пробовал ответ Matthieu Charbonnier, но это не сработало, если я не добавил

" 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 очень удобен для указания, хотите ли вы отображать элемент управления в верхней или нижней части экрана.

Ответ 6

У меня

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

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

Page.SetFocus(mvAriza.ClientID);

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

Ответ 7

Эта прокрутка автоматически в нужное Div в asp.net Control Это функция назовите его откуда вы хотите а также Загрузить файл Java script

OnClientClick = "return scrollGrid()"

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

Ответ 8

попробуй это

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);

        }
    }