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

Если в профиле используются сгруппированные данные, порядок доступа к такой информации несколько отличается от доступа к отдельным свойствам. Чтобы получить доступ к свойству в группе, необходимо указать имя группы и самого свойства, разделенные точкой:
Sys.Services.ProfileService.properties.<имя группы>.<имя свойства>

Еще раз напомню, что невозможно в файле Web.config объявить доступной для чтения или записи всю группу целиком, но это можно сделать для всех элементов в группе по отдельности:

enabled="true"
readAccessProperties="UserData.myUserName,UserData.myPassword"
writeAccessProperties="UserData.myUserName,UserData.myPassword" />

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

function saveProfile1() {
Sys.Services.ProfileService.properties.UserData.myUserName =
$get("txtUsername").value;
Sys.Services.ProfileService.save(
null,
profileSaved,
profileError,
{"operation": "save", "property": "username"});
}
function saveProfile2() {
Sys.Services.ProfileService.properties.UserData.myPassword =
$get("txtPassword").value;
Sys.Services.ProfileService.save(
null,
profileSaved,
profileError,
{"operation": "save", "property": "password"});
}

Как видите, в данном случае снова используется тот же контекст, но на этот раз вместо строки используется объект.


Свойство operation этого объекта будет содержать либо строку "save", либо строку "load" (разумеется, первое значение будет использоваться только в функции сохранения), а свойство property содержит информацию о том, какие данные были записаны в профиль. В результате удалось убить сразу двух зайцев: в сценарии присутствует всего одна функция обработки ошибок и всего одна функция, обрабатывающая успешное завершение записи данных в профиль. Приведем сначала последний обработчик:

function profileSaved(success, context) {
$get("statusText").firstChild.nodeValue =
"Profile data (" + context.property + ") saved.";
}

Конкретная контекстная информация также должна приниматься во внимание при вызове метода load():
Sys.Services.ProfileService.load(
profileLoaded,
profileError,
{"operation": "load"});

В заключение необходимо изменить функцию profileError():
function profileError(result, context) {
$get("statusText").firstChild.nodeValue =
"Could not " + context.operation + " profile (" +
result.get_message() +
"). Check the configuration in web.config!";
}

Полный программный код этого приложения приводится в примере 7.2.
Пример 7.2.


Чтение и запись сгруппированных данных профиля
ProfileGroup.aspx
<%@ Page Language="C#" %>
www.w3.org/TR/
xhtml1/DTD/xhtml1?transitional.dtd"> ASP.NET AJAX

Check the configuration in web.config!";
}
function saveProfile1() {
Sys.Services.ProfileService.properties.UserData.myUserName =
$get("txtUsername").value;
Sys.Services.ProfileService.save(
null,
profileSaved,
profileError,
{"operation": "save", "property": "username"});
}
function saveProfile2() {
Sys.Services.ProfileService.properties.UserData.myPassword =
$get("txtPassword").value;
Sys.Services.ProfileService.save(
null,
profileSaved,
profileError,
{"operation": "save", "property": "password"});
}
function profileSaved(success, context) {
$get("statusText").firstChild.nodeValue = "Profile data (" +
context.property
+ ") saved.";
}


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

User name:

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

 


(/body)
.



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

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