自己理解的系列(1) Profile
2008-03-20 12:08
197 查看
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
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
相关文章推荐
- Android 源码系列之<十一>从源码的角度深入理解AccessibilityService,打造自己的APP小外挂(下)
- Android 源码系列之<十>从源码的角度深入理解AccessibilityService,打造自己的APP小外挂(上)
- 被自己菜哭-阅读理解不及格系列
- 【C++】玩转Google开源C++单元测试框架Google Test系列(gtest)之八 - 打造自己的单元测试框架
- 深入理解JavaScript系列+php内核
- AVAsset、AVMutableComposition系列类的理解及视频裁剪示例
- 深入理解DOM事件类型系列第四篇——剪贴板事件
- 趣味理解ADO.NET对象模型 系列二——进水笼头--建立Connection
- 敏捷开发生态系统系列之四:计划跟踪II(自组织团队-开发团队自己估算-PO挑战估算-同行压力)
- Android开发系列(二十):AutoCompleteTextView(自己主动完毕文本框)的功能和使用方法
- 理解需求,正视自己
- [深入理解Java虚拟机]第一章实战 自己编译JDK
- 异常--自己理解
- STM32系列之SPI_NSS的理解
- sql优化之:深入浅出理解索引(系列一)
- SEO系列第一课SEO的理解和应用
- 深度学习系列教程 - 1.2.3 神经网络如何判断自己预测得是否准确
- bitmap与桶方式对1000万数据进行排序(转+自己实现理解)
- 深入理解JavaScript系列(4):立即调用的函数表达式
- 极速理解设计模式系列:2.观察者模式(Observer Pattern)