ASP.net Postback - перейти к определенной позиции
У меня есть страница ASP.net WebForms, в которой много контента в верхней части экрана. У него есть кнопка ссылки, которая будет отправляться обратно на страницу и отображать другой раздел страницы. Когда страница обновляется, я хотел бы установить фокус и прокрутить вниз до этого раздела страницы.
Я пробовал делать
txtField.Focus()
в моем коде позади, и он установит фокус и попробует прокручивать его, но затем прокручивается назад. Фокус все еще находится в моем текстовом поле, но положение экрана находится на самом верху. Ссылка находится в верхней части экрана, которая вызывает обратную передачу. Я хочу прокрутить до самого нижнего края экрана. Он делает это кратко, а затем прокручивается назад.
Я попытался установить
Page.MaintainScrollPositionOnPostback = false;
но это тоже не помогает.
Есть ли способ заставить его перейти к определенной позиции?
Можно ли добавить тег привязки к URL-адресу, когда я возвращаю сообщение с помощью кнопки или ссылки?
Ответы
Ответ 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);
}
}