Показать Telerik RadWindow с сервера, сохраняя положение прокрутки
При отображении RadWindow при прокрутке вниз страницы, окно отображается в верхней части страницы, и мне нужно прокрутить вверх, чтобы увидеть окно.
Я поддерживаю положение прокрутки после возврата, устанавливая 'MaintainScrollPositionOnPostback':
<%@ Page Language="C#" MaintainScrollPositionOnPostback="true" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
У меня есть RadListView, где ItemTemplate имеет кнопку. Когда эта кнопка нажата, я показываю модальное окно RadWindow.
Проблема заключается в том, что если я прокручиваю до конца страницы и нажимаю кнопку, страница отображает окно в верхней части страницы, но затем прокручивается обратно туда, где был прокручен пользователь (из-за MaintainScrollPositionOnPostback). Таким образом, окно отображается вне экрана, пока пользователь не прокрутит назад
Как я могу показать RadWindow, где пользователь прокручивается при обратной передаче? (Не в верхней части страницы)
Я попытался отобразить RadWindow 2 по-разному, но оба имеют одинаковый результат
Способ 1:
Window.VisibleOnPageLoad = true;
Способ 2:
string script = "function f(){$find(\"" + RadWindow1.ClientID + "\").show(); Sys.Application.remove_load(f);}Sys.Application.add_load(f);";
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "key", script, true);
1 ответ
Добавить время ожидания show()
чтобы прокрутка происходила до того, как вы откроете RadWindow. В противном случае вот что происходит:
постбэк возвращается, страница не прокручивается
RadWindow показывает, центры в текущем окне просмотра
прокрутка, поэтому ваше RadWindow находится не там, где вы ожидаете
Вот пример:
string script = "function f(){setTimeout(function(){$find(\"" + RadWindow1.ClientID + "\").show(); },111);Sys.Application.remove_load(f);}Sys.Application.add_load(f);";
где вы можете настроить таймаут 111 мс, который я добавил для наглядности. Использование 0 в качестве аргумента также может быть достаточно. Если честно, я не знаю, сколько времени понадобится, чтобы свиток сдвинулся.
Кстати, я бы создал функцию JS в разметке, которая бы принимала идентификатор RadWIndow в качестве аргумента и вызывала его вместо этого, чтобы сделать код более читабельным