在ASP.NET AJAX中使用应用程序服务和本地化(3):用户个性化组件ProfileService
?
在內建了身份認證應用程序服務之后,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()方法的參數
表5-4中所列出的4個參數均為可選。對于loadCompletedCallback和failedCallback參數,如果為ProfileService對象設置了默認值的話(將在稍后介紹),也可以省略。
加載用戶個性化屬性完成之后的回調函數,即loadCompletedCallback參數所指定的函數的完整的簽名如下(回調函數及其參數的名稱可以根據需要自行更改):
function onLoadCompleted(numProperties, userContext, methodName)其中,ASP.NET AJAX在執行回調時為我們提供了3個參數:
調用認證服務失敗之后的回調函數,即failedCallback參數所指定的函數的完整的簽名如下(回調函數及其參數的名稱可以根據需要自行更改):
function onProfileFailed(error, userContext, methodName)ASP.NET AJAX在執行回調時同樣為我們提供了3個參數:
?
5.3.2 save()方法
save()方法用來保存當前可能經過修改的用戶個性化屬性。調用save()方法的完整語法如下:
Sys.Services.ProfileService.save( propertyNames, saveCompletedCallback, failedCallback, userContext );其中各個參數的含義如表5-5所示。
表5-5 ProfileService對象logout()方法的參數
表5-5中所列出的4個參數均是可選的。對于saveCompletedCallback和failedCallback參數,如果為ProfileService對象設置了默認值的話(將在稍后介紹),也可以省略。
保存用戶個性化屬性完成之后的回調函數,即saveCompletedCallback參數所指定的函數的完整的簽名如下(回調函數及其參數的名稱可以根據需要自行更改):
function onSaveCompleted(numProperties, userContext, methodName)其中,ASP.NET AJAX在執行回調時為我們提供了3個參數:
保存用戶個性化屬性失敗時的回調函數,即failedCallback參數所指定的函數的完整的簽名如下(回調函數及其參數的名稱可以根據需要自行更改):
function onProfileFailed(error, userContext, methodName)ASP.NET AJAX在執行回調時同樣為我們提供了3個參數:
?
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對象的常用屬性
如下代碼演示了設置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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态添加JavaScript
- 下一篇: asp.net ajax控件工具集 Au