本文来自《ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关》的第五章《应用程序服务和本地化》。

在内建了身份认证应用程序服务之后,ASP.NET 2.0已经提供了对用户管理的初步支持。然而,用户信息却不仅仅只是用户名和密码这两项,对于一般网站来讲,我们都需要提供一些与用户帐号相关联的自定义属性。例如在BBS程序中,这类自定义属性就有用户的积分、等级、签名档、头像等,这些自定义属性都与用户帐号一一对应。为此,ASP.NET 2.0特意内建了用户个性化应用程序服务,同样以统一的方式提供给开发者。ASP.NET 2.0内建的用户个性化应用程序服务的配置、使用非常简单,也提供了足够灵活的扩展能力。

参考:若想了解更多有关ASP.NET 2.0的用户个性化服务,请参考这篇MSDN文章:《ASP.NET Profile Properties 》(http://msdn2.microsoft.com/en-us/library/at64shx3.aspx)。

ASP.NET AJAX框架的用户个性化服务能够与ASP.NET 2.0的用户个性化应用程序服务集成起来,并为其提供客户端的JavaScript调用代理。ASP.NET AJAX客户端部分用户个性化代理的相关功能统一由客户端ProfileService对象提供。

ProfileService对象的完全限定名为Sys.Services.ProfileService。与AuthenticationService对象类似,ProfileService是一个单例(Singleton)模式的对象,无须手工创建实例即可使用。只要页面中包含有ScriptManager控件,我们即可在客户端直接访问到ProfileService对象,进而间接地与服务器端用户个性化服务打交道并使用ASP.NET 2.0提供的用户个性化服务的相关功能,例如加载或保存用户的个性化属性等——ASP.NET AJAX框架将负责整个异步通讯的实现细节,就像ASP.NET AJAX异步通讯层为Web Service生成客户端代理一样。

ProfileService对象提供了两个方法:load()和save(),分别用来加载和保存用户的个性化属性,还提供了一个名为properties的字段,用来以类似服务器端“强类型访问方式”的方法在客户端访问用户个性化属性。此外,ProfileService还暴露出了一系列的常用属性。下面我们来逐一介绍:

5.3.1 load()方法

load()方法用来加载当前用户的个性化属性,在加载完成之后,我们即可在客户端通过ProfileService对象的properties属性访问到已经被加载的各个用户个性化属性。调用load()方法的完整语法如下:

Sys.Services.ProfileService.load(
    propertyNames, 
    loadCompletedCallback, 
    failedCallback, 
    userContext
);

其中各个参数的含义如表5-4所示。

表5-4 ProfileService对象load()方法的参数

  1. propertyNames:一个包含string对象的数组,表示需要从服务器端加载的用户个性化属性集合。若是该参数为null的话,则ASP.NET AJAX将自动加载所有允许客户端读取的用户个性化属性。关于如何将ASP.NET 2.0中的各个用户个性化属性有选择性地暴露给客户端,将在本章下一节的示例程序中介绍。
  2. loadCompletedCallback:加载用户个性化属性完成之后的回调函数。
  3. failedCallback:加载用户个性化属性失败时的回调函数。导致失败的原因可能是网络连接超时、或是用户个性化服务内部抛出异常等。
  4. userContext:随本次异步调用发送至服务器端的用户上下文对象。

表5-4中所列出的4个参数均为可选。对于loadCompletedCallback和failedCallback参数,如果为ProfileService对象设置了默认值的话(将在稍后介绍),也可以省略。

加载用户个性化属性完成之后的回调函数,即loadCompletedCallback参数所指定的函数的完整的签名如下(回调函数及其参数的名称可以根据需要自行更改):

function onLoadCompleted(numProperties, userContext, methodName) 

其中,ASP.NET AJAX在执行回调时为我们提供了3个参数:

  1. numProperties:表示此次加载过程中加载了的用户个性化属性的个数。
  2. userContext:在调用load()方法时传递的用户上下文对象。
  3. methodName:调用方法的方法名。

调用认证服务失败之后的回调函数,即failedCallback参数所指定的函数的完整的签名如下(回调函数及其参数的名称可以根据需要自行更改):

function onProfileFailed(error, userContext, methodName) 

ASP.NET AJAX在执行回调时同样为我们提供了3个参数:

  1. error:导致认证服务失败的异常对象。
  2. userContext:在调用load()方法时传递的用户上下文对象。
  3. methodName:调用方法的方法名。

5.3.2 save()方法

save()方法用来保存当前可能经过修改的用户个性化属性。调用save()方法的完整语法如下:

Sys.Services.ProfileService.save(
    propertyNames, 
    saveCompletedCallback, 
    failedCallback, 
    userContext
);

其中各个参数的含义如表5-5所示。

表5-5 ProfileService对象logout()方法的参数

  1. propertyNames:一个包含string对象的数组,表示需要保存至服务器的用户个性化属性集合。若是该参数为null的话,则ASP.NET AJAX将自动保存所有允许从客户端写入的用户个性化属性。关于如何将ASP.NET 2.0中的各个用户个性化属性有选择性地暴露给客户端,将在本章下一节的示例程序中介绍。
  2. saveCompletedCallback:保存用户个性化属性完成之后的回调函数。
  3. failedCallback :保存用户个性化属性失败时的回调函数。导致失败的原因可能是网络连接超时、或是用户个性化服务内部抛出异常等。
  4. userContext:随本次异步调用发送至服务器端的用户上下文对象。

表5-5中所列出的4个参数均是可选的。对于saveCompletedCallback和failedCallback参数,如果为ProfileService对象设置了默认值的话(将在稍后介绍),也可以省略。

保存用户个性化属性完成之后的回调函数,即saveCompletedCallback参数所指定的函数的完整的签名如下(回调函数及其参数的名称可以根据需要自行更改):

function onSaveCompleted(numProperties, userContext, methodName) 

其中,ASP.NET AJAX在执行回调时为我们提供了3个参数:

  1. numProperties:表示此次保存过程中保存了的用户个性化属性的个数。
  2. userContext:在调用save()方法时传递的用户上下文对象。
  3. methodName:调用方法的方法名。

保存用户个性化属性失败时的回调函数,即failedCallback参数所指定的函数的完整的签名如下(回调函数及其参数的名称可以根据需要自行更改):

function onProfileFailed(error, userContext, methodName) 

ASP.NET AJAX在执行回调时同样为我们提供了3个参数:

  1. error:导致认证服务失败的异常对象。
  2. userContext:在调用save()方法时传递的用户上下文对象。
  3. methodName:调用方法的方法名。

5.3.3 properties字段

ASP.NET 2.0所提供了用户个性化应用程序服务中的一个非常强大的特性就是,它允许开发者以强类型的方式访问到各个预定义的用户个性化属性。例如,若我们在web.config文件的<configuration />\<system.web />节中定义了如下的用户个性化属性:

<profile enabled="true">
  <properties>
    <add name="Address" type="System.String" />
    <add name="Age" type="System.Int32" />
    <add name="InfoPanelPosition" type="System.Drawing.Point" />
  </properties>
</profile>

那么在ASP.NET页面中,即可直接以强类型的方式访问到这些属性。请参考如下一段服务器端C#代码:

string address = Profile.Address;
int age = Profile.Age;
System.Drawing.Point infoPanelPosition = Profile.InfoPanelPosition;

虽然在客户端使用的JavaScript是一门动态语言,其中的变量并没有那么“严格”的类型约束,不过ProfileService对象所提供的properties字段依然能够让开发者能够以类似的语法规则在客户端访问用户个性化属性。

在调用ProfileService对象的load()方法,并成功加载了用户个性化属性之后,我们即可使用其properties字段以类似上述C#代码的方式在JavaScript中访问到各个用户个性化属性;

var address = 
    Sys.Services.ProfileService.properties.Address;
var age = 
    Sys.Services.ProfileService.properties.Age;
var infoPanelPosition = 
    Sys.Services.ProfileService.properties.InfoPanelPosition;

ProfileService对象的properties字段也能够支持web.config文件中定义的用户个性化组(Profile Group)。例如如下用户个性化组的定义:

<profile enabled="true">
  <properties>
    <group name="Address">
      <add name="Street" type="System.String" />
      <add name="City" type="System.String"/>
      <add name="PostalCode" type="System.String" />
    </group>
  </properties>
</profile>

在客户端JavaScript中,我们也可以使用如下的语法(即[GroupName].[PropertyName])对这个用户个性化组中的属性进行访问:

var street = 
    Sys.Services.ProfileService.properties.Address.Street;
var city = 
    Sys.Services.ProfileService.properties.Address.City;
var postCode = 
    Sys.Services.ProfileService.properties.Address.PostCode;

5.3.4 常用属性

除了前面介绍的load()、save()方法以及properties属性之外,ProfileService对象还提供了几个经常用到的属性,如表5-6所示。

表5-6 ProfileService对象的常用属性

  1. timeout:获取或设定加载/保存用户个性化属性的超时时间,单位为毫秒。
  2. defaultLoadCompletedCallback :获取或设定默认的加载用户个性化属性完成之后的回调函数。
  3. defaultSaveCompletedCallback:获取或设定默认的保存用户个性化属性完成之后的回调函数。
  4. defaultFailedCallback:获取或设定默认的加载/保存用户个性化属性失败时的回调函数。

如下代码演示了设置ProfileService对象的timeout属性:

Sys.Services.ProfileService.set_timeout(3000); 

若是预先设定了defaultLoadCompletedCallback、defaultSaveCompletedCallback和defaultFailedCallback属性,那么在调用ProfileService对象的load()和save()方法时,即可不必重复指定各个回调函数。例如,如下代码就设定了ProfileService对象的这3个属性,并定义了相应的默认回调函数:

Sys.Services.ProfileService.set_defaultLoadCompletedCallback(onLoadCompleted);
Sys.Services.ProfileService.set_defaultSaveCompletedCallback(onSaveCompleted);
Sys.Services.ProfileService.set_defaultFailedCallback(onProfileFailed);
 
function onLoadCompleted(numProperties, userContext, methodName) {
    // ...
}
 
function onSaveCompleted(numProperties, userContext, methodName) {
    // ...
}
 
function onProfileFailed(error, userContext, methodName) {
    // ...
}

随后,我们即可直接使用如下代码加载/保存用户的个性化属性了,是不是显得非常简单呢?

Sys.Services.ProfileService.load();
Sys.Services.ProfileService.save();

转载于:https://www.cnblogs.com/dflying/archive/2007/07/13/812823.html

在ASP.NET AJAX中使用应用程序服务和本地化(3):用户个性化组件ProfileService相关推荐

  1. 在ASP.NET AJAX中使用应用程序服务和本地化(5):自定义应用程序服务的服务器端实现...

    本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第五章<应用程序服务和本地化>. 身份认证与用户个性化等应用程序 ...

  2. 在ASP.NET AJAX中使用应用程序服务和本地化(4):示例程序:读取、修改并保存用户个性化信息...

    本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第五章<应用程序服务和本地化>. 让我们通过编写一个完整的示例程 ...

  3. 现存问题以及解决方案:在ASP.NET AJAX中从客户端向服务器端传送DataTable

    摘要 在<现存问题以及解决方案:在ASP.NET AJAX客户端得到服务器端的DataTable>这篇文章中,我给出了一个在ASP.NET AJAX中从服务器端得到客户端DataTable ...

  4. 深入剖析微软ASP.NET Ajax中的数据绑定构架下篇之二

    四.例2-数据库绑定 现在,我们来讨论更为复杂的数据库绑定的例子.根据我们前面的讨论,我们找到了使用DataSource的典型场所:在前面的例1中,我们使用了一种内存数据来模拟有状态的web服务.但是 ...

  5. ASP.NET Core中实现单体程序的事件发布/订阅 - LamondLu - 博客园

    标题:ASP.NET Core中实现单体程序的事件发布/订阅作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/10468058.html 项目源代码:h ...

  6. 分清ASP.NET AJAX中的Extender和Behavior模型

    ASP.NET AJAX提出了多种模型,在客户端有Component.Control和Behavior模型,在服务器端有ScirptControl和Extender模型.这些模型各有各的用途,但是请注 ...

  7. oracle 国际化时间,Oracle Solaris中的应用程序国际化和本地化

    libc库中可用于代码转换的iconv()函数如下: iconv_open() 代码转换分配功能 代码转换功能 iconv_close() 代码转换取消分配功能 iconvctl() 控制和查询代码转 ...

  8. ASP.NET MVC 中宿主WCF Rest 服务的解决方法

    我这里就是通过routes.MapRoute(参数)中的参数进行处理的.MapRoute的重载如下: RouteTable.Routes.MapRoute( string name, string u ...

  9. asp.net mvc C# 微信公众号-服务号开发 (用户网页授权获取用户昵称头像信息)...

    参考文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432 一.安装Senparc.Weixin NuGet包 ...

最新文章

  1. 20150726 填坑日记
  2. python实训总结报告书_20172304 实验四python综合实践报告
  3. java源码阅读LinkedList
  4. Tomcat 的目录结构
  5. 与饿了么三年“独家合作”即将到期 星巴克正与顺丰、美团等商谈配送合作
  6. 删除mysql 执行计划_如何清除某条SQL的执行计划
  7. 卸载linux订阅包
  8. 【BZOJ4660】Crazy Rabbit 结论+DP
  9. 从0开始html前端页面开发_CSS设置图像边框阴影
  10. 1.业务层 、服务层、数据层、表现层
  11. 苹果游戏投屏电脑控制
  12. 模电与数电的基本知识 (学习备用)
  13. VUE3使用keep-alive页面切换时报错:parentComponent.ctx.deactivate is not a function
  14. 求质数(Prime Number 素数)的方法——厄拉多塞筛法
  15. sphinx 编码 php文档,用Sphinx编写技术文档
  16. 简历类个人网站如何制作?
  17. 解决:Hbuilder工具点击发行打包,一直报尚未完成社区身份验证,请点击链接xxxxx,项目xxx发布H5失败的错误。
  18. 已开源!Flutter 流畅度优化组件 keframe
  19. 台式计算机无法启动不了,台式机和笔记本电脑主机启动不了常见原因解决方法...
  20. linux 强制卸载nfs,linux nfs 卸载

热门文章

  1. tar解压出错:gzip: stdin: unexpected end of file的解决
  2. Linux如何在系统启动时自动加载模块
  3. Java数据类型转换(自动转换和强制转换)
  4. 细说反射,Java 和 Android 开发者必须跨越的坎
  5. Android-实现View滑动的6种方式
  6. JZOJ 1277. 最高的奶牛
  7. JZOJ 4910. 【NOIP2017模拟12.3】子串
  8. MySQL编程技巧_PHP与MySQL开发的8个技巧小结
  9. 这台计算机怎么磁盘清理,电脑硬盘满了怎么清理(教你3招彻底清理内存,瞬间多出几十个G)...
  10. 用php编写比赛评奖系统_php编写的抽奖程序中奖概率算法