在ASP.NET AJAX中使用应用程序服务和本地化(3):用户个性化组件ProfileService
?
在內(nèi)建了身份認(rèn)證應(yīng)用程序服務(wù)之后,ASP.NET 2.0已經(jīng)提供了對用戶管理的初步支持。然而,用戶信息卻不僅僅只是用戶名和密碼這兩項,對于一般網(wǎng)站來講,我們都需要提供一些與用戶帳號相關(guān)聯(lián)的自定義屬性。例如在BBS程序中,這類自定義屬性就有用戶的積分、等級、簽名檔、頭像等,這些自定義屬性都與用戶帳號一一對應(yīng)。為此,ASP.NET 2.0特意內(nèi)建了用戶個性化應(yīng)用程序服務(wù),同樣以統(tǒng)一的方式提供給開發(fā)者。ASP.NET 2.0內(nèi)建的用戶個性化應(yīng)用程序服務(wù)的配置、使用非常簡單,也提供了足夠靈活的擴(kuò)展能力。
參考:若想了解更多有關(guān)ASP.NET 2.0的用戶個性化服務(wù),請參考這篇MSDN文章:《ASP.NET Profile Properties?》(http://msdn2.microsoft.com/en-us/library/at64shx3.aspx)。
ASP.NET AJAX框架的用戶個性化服務(wù)能夠與ASP.NET 2.0的用戶個性化應(yīng)用程序服務(wù)集成起來,并為其提供客戶端的JavaScript調(diào)用代理。ASP.NET AJAX客戶端部分用戶個性化代理的相關(guān)功能統(tǒng)一由客戶端ProfileService對象提供。
ProfileService對象的完全限定名為Sys.Services.ProfileService。與AuthenticationService對象類似,ProfileService是一個單例(Singleton)模式的對象,無須手工創(chuàng)建實例即可使用。只要頁面中包含有ScriptManager控件,我們即可在客戶端直接訪問到ProfileService對象,進(jìn)而間接地與服務(wù)器端用戶個性化服務(wù)打交道并使用ASP.NET 2.0提供的用戶個性化服務(wù)的相關(guān)功能,例如加載或保存用戶的個性化屬性等——ASP.NET AJAX框架將負(fù)責(zé)整個異步通訊的實現(xiàn)細(xì)節(jié),就像ASP.NET AJAX異步通訊層為Web Service生成客戶端代理一樣。
ProfileService對象提供了兩個方法:load()和save(),分別用來加載和保存用戶的個性化屬性,還提供了一個名為properties的字段,用來以類似服務(wù)器端“強(qiáng)類型訪問方式”的方法在客戶端訪問用戶個性化屬性。此外,ProfileService還暴露出了一系列的常用屬性。下面我們來逐一介紹:
?
5.3.1 load()方法
load()方法用來加載當(dāng)前用戶的個性化屬性,在加載完成之后,我們即可在客戶端通過ProfileService對象的properties屬性訪問到已經(jīng)被加載的各個用戶個性化屬性。調(diào)用load()方法的完整語法如下:
Sys.Services.ProfileService.load( propertyNames, loadCompletedCallback, failedCallback, userContext );其中各個參數(shù)的含義如表5-4所示。
表5-4 ProfileService對象load()方法的參數(shù)
表5-4中所列出的4個參數(shù)均為可選。對于loadCompletedCallback和failedCallback參數(shù),如果為ProfileService對象設(shè)置了默認(rèn)值的話(將在稍后介紹),也可以省略。
加載用戶個性化屬性完成之后的回調(diào)函數(shù),即loadCompletedCallback參數(shù)所指定的函數(shù)的完整的簽名如下(回調(diào)函數(shù)及其參數(shù)的名稱可以根據(jù)需要自行更改):
function onLoadCompleted(numProperties, userContext, methodName)其中,ASP.NET AJAX在執(zhí)行回調(diào)時為我們提供了3個參數(shù):
調(diào)用認(rèn)證服務(wù)失敗之后的回調(diào)函數(shù),即failedCallback參數(shù)所指定的函數(shù)的完整的簽名如下(回調(diào)函數(shù)及其參數(shù)的名稱可以根據(jù)需要自行更改):
function onProfileFailed(error, userContext, methodName)ASP.NET AJAX在執(zhí)行回調(diào)時同樣為我們提供了3個參數(shù):
?
5.3.2 save()方法
save()方法用來保存當(dāng)前可能經(jīng)過修改的用戶個性化屬性。調(diào)用save()方法的完整語法如下:
Sys.Services.ProfileService.save( propertyNames, saveCompletedCallback, failedCallback, userContext );其中各個參數(shù)的含義如表5-5所示。
表5-5 ProfileService對象logout()方法的參數(shù)
表5-5中所列出的4個參數(shù)均是可選的。對于saveCompletedCallback和failedCallback參數(shù),如果為ProfileService對象設(shè)置了默認(rèn)值的話(將在稍后介紹),也可以省略。
保存用戶個性化屬性完成之后的回調(diào)函數(shù),即saveCompletedCallback參數(shù)所指定的函數(shù)的完整的簽名如下(回調(diào)函數(shù)及其參數(shù)的名稱可以根據(jù)需要自行更改):
function onSaveCompleted(numProperties, userContext, methodName)其中,ASP.NET AJAX在執(zhí)行回調(diào)時為我們提供了3個參數(shù):
保存用戶個性化屬性失敗時的回調(diào)函數(shù),即failedCallback參數(shù)所指定的函數(shù)的完整的簽名如下(回調(diào)函數(shù)及其參數(shù)的名稱可以根據(jù)需要自行更改):
function onProfileFailed(error, userContext, methodName)ASP.NET AJAX在執(zhí)行回調(diào)時同樣為我們提供了3個參數(shù):
?
5.3.3 properties字段
ASP.NET 2.0所提供了用戶個性化應(yīng)用程序服務(wù)中的一個非常強(qiáng)大的特性就是,它允許開發(fā)者以強(qiáng)類型的方式訪問到各個預(yù)定義的用戶個性化屬性。例如,若我們在web.config文件的<configuration />\<system.web />節(jié)中定義了如下的用戶個性化屬性:??
<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頁面中,即可直接以強(qiáng)類型的方式訪問到這些屬性。請參考如下一段服務(wù)器端C#代碼:
string address = Profile.Address; int age = Profile.Age; System.Drawing.Point infoPanelPosition = Profile.InfoPanelPosition;雖然在客戶端使用的JavaScript是一門動態(tài)語言,其中的變量并沒有那么“嚴(yán)格”的類型約束,不過ProfileService對象所提供的properties字段依然能夠讓開發(fā)者能夠以類似的語法規(guī)則在客戶端訪問用戶個性化屬性。
在調(diào)用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])對這個用戶個性化組中的屬性進(jìn)行訪問:
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對象還提供了幾個經(jīng)常用到的屬性,如表5-6所示。
表5-6 ProfileService對象的常用屬性
如下代碼演示了設(shè)置ProfileService對象的timeout屬性:
Sys.Services.ProfileService.set_timeout(3000);若是預(yù)先設(shè)定了defaultLoadCompletedCallback、defaultSaveCompletedCallback和defaultFailedCallback屬性,那么在調(diào)用ProfileService對象的load()和save()方法時,即可不必重復(fù)指定各個回調(diào)函數(shù)。例如,如下代碼就設(shè)定了ProfileService對象的這3個屬性,并定義了相應(yīng)的默認(rèn)回調(diào)函數(shù):
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();轉(zhuǎn)載于:https://www.cnblogs.com/dflying/archive/2007/07/13/812823.html
總結(jié)
以上是生活随笔為你收集整理的在ASP.NET AJAX中使用应用程序服务和本地化(3):用户个性化组件ProfileService的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态添加JavaScript
- 下一篇: asp.net中退出登陆的相关问题(解决