Индивидуализация поведения «перетащить-и-отпустить»

В предыдущих примерах имеется одно ограничение. Как уже было продемонстрировано, наша панель может свободно перемещаться по всей поверхности страницы. Однако если покинуть страницу и вернуться к ней позже, вы увидите, что самое последнее положение панели не сохранилось. Это ограничение вполне преодолимо.

И снова ключевой окажется возможность использования уже имеющегося кода. В ASP.NET 2.0 имеются средства индивидуализации в виде свойств профиля. Платформа ASP.NET AJAX поддерживает свойства профиля для некоторых из своих элементов управления, включая и DragDropExtender. Положение перемещаемой панели можно сохранить в свойстве ProfileProperty компонента DragOverlayExtender.

Чтобы иметь возможность сохранять данные о положении, нужно создать свойство профиля в файле Web.config в виде следующей разметки:

(anonymousIdentification enabled="true" /)


(add name="DragPanelPosition" allowAnonymous="true" /)


[...]




writeAccessProperties="DragPanelPosition"
readAccessProperties="DragPanelPosition" />
[...]





Добавьте эти изменения в существующий файл Web.config вашего приложения.


Затем вам необходимо активировать поддержку службы управления профилями в странице, добавив элемент (asp:ProfileService). Не забудьте установить свойство AutoSave в значение true, чтобы измененная позиция панели автоматически сохранялась при выполнении каждой операции перетаскивания.
(asp:ProfileService ID="ProfileService1" runat="server" AutoSave="true" /)

В заключение необходимо добавить в объявление DragDropExtender ссылку на свойство профиля, которое будет использоваться для сохранения положения прямоугольника. Значение свойства ProfileServiceID элемента DragDropExtender должно соответствовать идентификатору элемента управления ProfileService, только что добавленного в страницу.
(asp:DragOverlayExtender ID="DragOverlayExtender1" runat="server"
TargetControlID="DragPanel" Enabled="true"
ProfileProperty="DragPanelPosition" ProfileServiceID="ProfileService1" /)

Теперь после повторной загрузки страницы элемент будет возвращаться в сохраненную позицию. Если приглядеться повнимательнее, можно заметить, что в самом начале страница отображается с панелью в позиции по умолчанию, и лишь потом она перемещается в сохраненную ранее позицию.


В примере 16.4 приводится полный код этой страницы.

Пример 16.4. Добавление поведения «перетащить-и-отпустить» к панели с возможностью запоминания позиции
DragDropExtenderProfile.aspx
<%@ Page Language="C#" %>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1?transitional.dtd">
ASP.NET AJAX


(body)
(asp:ScriptManager ID="ScriptManager1" runat="server")

(asp:ScriptReference name="PreviewScript.js"
assembly="Microsoft.Web.Preview" /)
(asp:ScriptReference name="PreviewDragDrop.js"
assembly="Microsoft.Web.Preview" /)

(/asp:ScriptManager)
(asp:Panel ID="ContentPanel" CssClass="box" runat="server")

My Portal



Welcome to your personal portal, powered by Microsoft ASP.NET AJAX.
The mail status window is freely draggable.


Welcome to your personal
portal, powered by ASP.NET AJAX.
The mail status window is freely draggable. Welcome to your personal
portal, powered by ASP.NET AJAX.

The mail status window is freely draggable.


[...]
(/asp:Panel)
(asp:Panel CssClass="mailbox" ID="DragPanel" runat="server")


You currently have
mails in your (a href="http://www.hotmail.com/")inbox(/a).


(/asp:Panel)
(asp:DragOverlayExtender ID="DragOverlayExtender1" runat="server"
TargetControlID="DragPanel" Enabled="true"
ProfileProperty="DragPanelPosition"
ProfileServiceID="ProfileService1" /)
(asp:ProfileService ID="ProfileService1" runat="server" AutoSave="true" /)

(/body)


При первом запуске этого примера можно заметить, что страница отображается в броузере с заметной задержкой. Это происходит из-за того, что ASP.NET затрачивает некоторое время на создание базы данных, где будет храниться информация профиля.


База данных профилей создается в каталоге App_Data веб?сайта в виде файла ASPNETDB.MDF. Если открыть его, можно увидеть запись с координатами панели в базе данных aspnet_Profile. Каждый раз, когда будет изменяться позиция панели, ASP.NET AJAX будет отправлять HTTP?запрос на обновление данных в профиле.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела ASP.NET AJAX на эту тему:
Аспект поведения щелчок
Аспект поведения «перетащить-и-отпустить»
Использование аспектов поведения
Использование компонента Timer
Использование компонентов