Доступ к данным в профиле

Функциональность, имеющая отношение к профилям, в ASP.NET AJAX определена в виде класса ProfileService. На первом этапе любое приложение, использующее поддержку доступа к профилям, должно загрузить информацию из профиля с помощью метода Sys.Services.ProfileService.load(), который ожидает получить четыре параметра:

propertyNames
Имена загружаемых свойств. Если в этом аргументе передать значение null или пустую строку, с сервера будут загружены все доступные свойства.
loadCompletedCallback
Метод, который необходимо вызвать в случае успешного окончания загрузки профиля.
failedCallback
Метод, который необходимо вызвать в случае неудачного окончания загрузки профиля (напоминает функцию обратного вызова, предназначенную для обработки ошибок обращений к веб?службам).
userContext
Необязательная информация, которая будет передана функциям обратного вызова.

После того как данные профиля будут загружены, доступ к этой информации выполняется достаточно просто. Читать и записывать значения свойств можно с использованием синтаксиса Sys.Services.ProfileService.properties.<имя свойства> – при условии, что настройки в файле Web.config позволяют это.


В нашем примере для доступа к свойству userName в профиле используется конструкция:
Sys.Services.ProfileService.properties.userName

Однако установка значения свойства в профиле на самом деле не приводит к сохранению этой информации на сервере – она доступна лишь сценарию JavaScript. Чтобы сохранить эту информацию, необходимо вызвать метод save(), который ожидает получить четыре параметра, как и метод load():

propertyNames
Имена сохраняемых свойств. Если в этом аргументе передать значение null или пустую строку, на сервер будут выгружены все свойства, доступные клиентскому сценарию.
loadCompletedCallback
Метод, который необходимо вызвать в случае успешного сохранения профиля.
failedCallback
Метод, который необходимо вызвать в случае неудачного сохранения профиля.
userContext
Необязательная информация, которая будет передана функциям обратного вызова.
Ниже демонстрируется пример использования этого прикладного интерфейса. Форма регистрации, где вводится имя пользователя (и, возможно, пароль), остается неизменной. Как обычно, сценарий начинается с элемента ScriptManager:
(asp:ScriptManager ID="ScriptManager1" runat="server" /)

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


Кроме того, на форме будет находиться метка HTML, в которую сценарий JavaScript будет выводить информацию о состоянии обращения к службе управления профилями:

User name: (br /)
Password: (br /)
onclick="alert('not implemented!');" />

 

Теперь можно приступить к реализации клиентского сценария. Когда страница и библиотеки ASP.NET AJAX будут загружены, сценарий извлекает все данные из профиля с помощью метода load():

function pageLoad() {
Sys.Services.ProfileService.load(
"",
profileLoaded,
profileError,
"load");
}

Функция profileError() просто выводит в метку сообщение, содержащее полезную (надеюсь) информацию об ошибке:

function profileError(result, context) {
$get("statusText").firstChild.nodeValue =
"Could not "+ context + " profile (" +
result.get_message() +
").


Check the configuration in web.config!";
}

Обратите внимание на то, как используется информация из необязательного аргумента userContext функции load() в функции обратного вызова, чтобы сообщение об ошибке начиналось со слов «Could not load profile» (невозможно загрузить настройки). Как вы уже наверняка догадались, это позволяет повторно использовать метод profileError() для обработки ошибки сохранения параметров пользователя, но с иным значением аргумента context.

Если информация из профиля будет благополучно загружена, становится доступным имя пользователя; оно записывается в текстовое поле:

function profileLoaded() {
$get("statusText").firstChild.nodeValue = "Profile data loaded.";
if (Sys.Services.ProfileService.properties.userName != null) {
$get("txtUsername").value =
Sys.Services.ProfileService.properties.userName;
}
}

Начиная с этого момента пути назад уже не будет. Когда пользователь введет в форму другое имя, эти данные необходимо вернуть на сервер и сохранить в профиле. Этот процесс запускает функция saveProfile():

function saveProfile() {
Sys.Services.ProfileService.properties.userName = $get("txtUsername").value;
Sys.Services.ProfileService.save(
null,
profileSaved,
profileError,
"save");
}

Здесь функция profileError() используется повторно, а функция profileSaved() – новая.


Ее цель – вывести новую информацию о состоянии:

function profileSaved() {
$get("statusText").firstChild.nodeValue = "Profile data saved.";
}

Все, что осталось сделать в приложении, – это вызвать функцию saveProfile(). Данная функция должна вызываться при изменении содержимого поля ввода с именем пользователя, то есть как обработчик события изменения текстового поля ввода. (Можно предусмотреть и другую возможность, например, сохранять имя пользователя только по нажатию кнопки регистрации.) Это поведение легко реализуется средствами JavaScript. Один из возможных способов заключается в использовании метода addHandler(), предоставляемого платформой ASP.NET AJAX:

$addHandler(
$get("txtUsername"),
"change",
saveProfile);

В примере 7.1 представлен полный программный код страницы. Не забудьте добавить в Web.config элементы, описанные ранее, чтобы активировать свойства профиля и сделать их доступными для клиентских приложений.
Пример 7.1. Чтение и запись данных профиля
Profile.aspx
<%@ Page Language="C#" %>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1?transitional.dtd"> ASP.NET AJAX

Check the configuration in web.config!";
}
function saveProfile() {
Sys.Services.ProfileService.properties.userName =
$get("txtUsername").value;
Sys.Services.ProfileService.save(
null,
profileSaved,
profileError,
"save");
}
function profileSaved() {
$get("statusText").firstChild.nodeValue = "Profile data saved.";
}


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

User name: (br /)
Password:
(br /)
onclick="alert('not implemented!');" />

 


(/body)


При запуске этого примера поля формы регистрации сначала пустые. (В самый первый раз можно заметить, что запуск примера длится несколько дольше, чем обычно – это связано с настройкой базы данных службы управления профилями в ASP.NET.) После ввода имени пользователя и нажатия клавиши табуляции введенное имя будет сохранено. С этого момента всякий раз, когда будет загружаться страница (при принудительном обновлении страницы из броузера или при повторном запуске броузера и примера), имя пользователя, введенное ранее, будет загружено в текстовое поле с меткой «User name» (имя пользователя).

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

Статьи из раздела ASP.NET AJAX на эту тему:
Доступ к сгруппированным данным в профиле
Подготовка веб-сайта