| ..: Как сохранить позицию скроллинга странице после PostBack :.. |
Автор: Jeff Prosise
Программирующих на ASP.NET часто огорчает тот факт, что
после того как произошло событие отправки данных серверу назад
(PostBack) возвращаемая страница теряет предыдущую позицию
скроллинга, что особенно неудобно при работе с "длинными"
формами. Пример, приведенный в данной статье показывает
решение, при помощи которого можно заставить браузер вернуть
предыдущую позицию. Идея проста - при помощи JavaScript вместе
с отправкой PostBack серверу отсылается текущее значение
скролиннга окна браузера, которое используется после для
формирования возвращаемой страницы. В тэг записывается
дополнительный атрибут onload, который опять же при помощи
JavaScript и позволяет вернуть позицию окна до PostBack.
<%@ Page Language="C#"%>
<html>
<%
if (Request["__SCROLLPOS"] != null &&
Request["__SCROLLPOS"] != String.Empty) {
int pos = Convert.ToInt32 (Request["__SCROLLPOS"]);
Response.Write ("<body id=\"myBody\" " +
"onload=\"javascript:myBody.scrollTop=" +
pos + ";\">");
}
else
Response.Write ("<body id=\"myBody\">");
%>
<form id="myForm" onsubmit=
"javascript:return onSubmitForm();" runat="server">
<input type="hidden" name="__SCROLLPOS" value="" />
<!-- код вашей страницы -->
<asp:Button Text="Test" RunAt="server" />
</form>
</body>
</html>
<script language="javascript">
function onSubmitForm ()
{
myForm.__SCROLLPOS.value = myBody.scrollTop;
return true;
}
</script>
Для проверки работы примера вставьте достаточно
содержания страницы (таблицу, форму и т.п.), так чтобы
страница не умещалась по высоте на экран. Нажмите на кнопку
Test и убедитесь, что браузер вернет страницу в той же позиции
скролиннга.
К сожалению, этот код будет работать только если PostBack
был вызван контролом Button. Другие контролы, вызывающие
PostBack, вроде LinkButton или Calendar генерируют это событие
программным путем, что не допускает выполнение функции
onSubmitForm.
При перепечатке любого материала с журнала или с сайта,
видимая ссылка на источник
http://altwebdeveloper.nm.ru
и все имена, ссылки авторов обязательны.
© 2004 CAS "altDesign"
© Валерий В. Макеев (deepInfinity)
|