您的位置:首页 > 其它

自己理解的系列(1) Profile

2008-03-20 12:08 141 查看
Asp.Net中有一套与用户相关联的属性设置,可以通过在WebConfig里配置来直接使用,他的作用为

1.存储和使用唯一与用户对应的信息

2.展现个性化版本的web应用程序

3.用户的唯一身份标识再次访问时识别用户

Profile提供跟用户相关的类型都是强类型

上面是比较正式的定义,既然是自己理解,我就认为Profile是一个可以让我们省了用session等对象来保存住描述各个用户属性的东西.通过在webconfig的设置就可以使网站用户拥有一些公共的属性.而且session是你离开网站就丢失的,Profile则是持

久化的对象.

接下来我做个demo来具体看看Profile的使用,包括asp.net2.0的Profile,asp.net ajax的Profile

新建一个web项目后,首先在webconfig对Profile添加配置:

配置的详细信息参看MSDN:http://msdn2.microsoft.com/zh-cn/library/ms164644.aspx

我加入了如下配置信息来简单描述用户

1 <anonymousIdentification enabled="true" />

2 <profile>

3 <properties>

4 <add name="Name" type="String"/>

5 <add name="Age" type="Int32"/>

6 <add name="Sex" type="Int32"/>

7 <group name="Address">

8 <add name="Location" type="String"/>

9 <add name="Zip" type="Int32"/>

10 </group>

11 </properties>

12 </profile>
其中anonoymousIdentification那项表示匿名用户也适用.

结果发现Profile.Name等属性点不出来~怎么回事,查了半天资料才发现web application不能这样用,得HttpContext.Current.Profile["ProfileName"]这样搞,而且试下来还是找不到- -.换成web网站项目,问题得以解决....

以下就是asp.net中Profile的简单用法,如果连了数据库的provider,则更新保存到数据库中aspnet_Profile表

protected void Page_Load(object sender, EventArgs e)

protected void btnSave_Click(object sender, EventArgs e)

<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>

注意2008的version=3.5.0.0 2005是2.0

用profileservice控件能方便的记录下用户的配置,比如移动浮动的控件的位置,下一次打开网站,控件位置还在上次移动的地方

1.首先添加记录位置的属性

<add name="CalLocation" type="String" allowAnonymous="true"/>
2.添加Profileservice配置

<system.web.extensions>

<scripting>

<webServices>

<profileService enabled="true" readAccessProperties="CalLocation" writeAccessProperties="CalLocation"/>

</webServices>

</scripting>

</system.web.extensions>

3.回到asp.net html页设置控件的属性,注意DragOverlayExtender的 ProfileServiceID和ProfileProperty属性

<asp:ScriptManager ID="ScriptManager1" runat="server">

</asp:ScriptManager>

<asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>

<cc1:ProfileService ID="ProfileService1" runat="server" AutoSave="true">

</cc1:ProfileService>

<cc1:DragOverlayExtender ID="DragOverlayExtender1" runat="server" TargetControlID="Calendar1" ProfileProperty="CalLocation" ProfileServiceID="ProfileService1"/>
这样设置,我们发现,移动日历控件后下一次打开网站,控件位置还在上次移动的地方

接下来,介绍下asp.net ajax Library即客户端对Profile的支持

客户端引用了MicrosoftAjax.js之后,通过Sys.Services.ProfileService来访问

例如:Sys.Services.ProfileService.Name

客户端提供save和load方法来控制Profile的读写

Sys.Services.ProfileService.load的方法详细说明如下

Sys.Services.ProfileService.load(

propertyNames, //需要加载的Profile名,null表示全取

loadCompletedCallback, //加载成功的回调函数

failedCallback, //加载失败的回调函数

userContext// 可以随意指定的上下文对象

);

function loadCompletedCallback(

number, // 本次加载的Profile数量

userContext, // 用户随意指定的上下文对象

methodName//即"Sys.Services.ProfileService.load"

)

读取失败的回调函数

function failedCallback(

error, // 错误对象

userContext, // 用户随意指定的上下文对象

methodName//即"Sys.Services.ProfileService.load"

)

Sys.Services.ProfileService.save方法进行保存。save方法的完整签名如下

Sys.Services.ProfileService.save(

propertyNames, //需要保存的Profile名,null表示全取

saveCompletedCallback, //保存成功的回调函数

failedCallback, //加载失败的回调函数

userContext// 可以随意指定的上下文对象

);

保存成功的回调函数的完整签名

function saveCompletedCallback(

number, // 本次保存的Profile数量

userContext, // 用户随意指定的上下文对象

methodName//即“Sys.Services.ProfileService.save”

)

保存失败的回调函数的完整签名

function failedCallback(

error, // 错误对象

userContext, // 用户随意指定的上下文对象

methodName//即"Sys.Services.ProfileService.save"

)

其他属性和方法请参考官方文档

设置webconfig中的webservice节点

<system.web.extensions>

<scripting>

<webServices>

<profileService enabled="true" readAccessProperties="CalLocation,Name,Age,Sex,Address.Location,Address.Zip" writeAccessProperties="CalLocation,Name,Age,Sex,Address.Location,Address.Zip"/>

</webServices>

</scripting>

</system.web.extensions>

这样,客户端就能读写到各个属性,加入入下js代码,特别的,setdefaultSaveCompletedCallback和setdefaultLoadCompletedCallback是指定ProfileSerive的默认的回调函数,之后就可以直接用save();load();

简单调用了

<script>

function pageLoad()

{

Sys.Services.ProfileService.load();

} Sys.Services.ProfileService.set_defaultSaveCompletedCallback(savecallback);

Sys.Services.ProfileService.set_defaultLoadCompletedCallback(loadcallback);

function savecallback(propertys,userContext,methodName)

{

$get('txbName').value= Sys.Services.ProfileService.properties.Name

$get('txbAge').value= Sys.Services.ProfileService.properties.Age;

$get('txbSex').value= Sys.Services.ProfileService.properties.Sex;

$get('txbLocation').value=Sys.Services.ProfileService.properties.Address.Location;

$get('txbZip').value=Sys.Services.ProfileService.properties.Address.Zip;

}

function loadcallback(propertys,userContext,methodName)

{

$get('txbName').value= Sys.Services.ProfileService.properties.Name

$get('txbAge').value= Sys.Services.ProfileService.properties.Age;

$get('txbSex').value= Sys.Services.ProfileService.properties.Sex;

$get('txbLocation').value=Sys.Services.ProfileService.properties.Address.Location;

$get('txbZip').value=Sys.Services.ProfileService.properties.Address.Zip;

}

function btnSave_onclick() {

Sys.Services.ProfileService.properties.Name=$get('txbName').value;

Sys.Services.ProfileService.properties.Age=$get('txbAge').value;

Sys.Services.ProfileService.properties.Sex=$get('txbSex').value;

Sys.Services.ProfileService.properties.Address.Location=$get('txbLocation').value;

Sys.Services.ProfileService.properties.Address.Zip=$get('txbZip').value;

$get("message").innerHTML="Save Success!"

Sys.Services.ProfileService.save();

}

</script>

页面的主要html代码如下:

<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Release">

</asp:ScriptManager>

姓名<input id="txbName" type="text" /><br />

年龄<input id="txbAge" type="text" /><br />

性别<input id="txbSex" type="text" /><br />

地址<input id="txbLocation" type="text" /><br />

邮编<input id="txbZip" type="text" /><br />

<input id="btnSave" type="button" value="button" onclick="return btnSave_onclick()" />

<div id="message"></div>
注意,这里的控件都是普通HTML控件!

总结,介绍了Profile的简单使用,Ajax方式使用.

Demo下载:http://www.cnblogs.com/geluxisi/ProfileDemo.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: