我们首先判断Profile里面的Age属性是否为0,其实可以判断任何一个属性。然后将Profile里面的属性给一一赋值到显示属性上。如果碰到了group节点上的属性,可以象使用对象里的属性一样使用。
然后是保存Profile
protected void btnSaveProfile_Click(object sender, EventArgs e)
{
this.Profile.Name = this.txtName.Text;
this.Profile.Age = Int32.Parse(this.txtAge.Text);
this.Profile.Email = this.txtEmail.Text;
this.Profile.Address.City = this.txtCity.Text;
this.Profile.Address.Street = this.txtStreet.Text;
this.Profile.Address.PostalCode = this.txtPostalCode.Text;
this.lblMessage.Text = this.User.Identity.Name + ": Profile Saved";
}
可以看到上面这段代码我们没有显视的保存Profile,当一个Profile的属性改变时,提交到服务器,Profile的属性会自动保存到数据库。碰到group节点的使用方法也一样。
这就是简单的Profile的在Asp.Net里面的应用。
下面我们来看看在Asp.Net Ajax里面怎么使用Profile。首先我们在system.web.extensions节点下的scripting节点下的webServices节点下添加一个节点
<profileService enabled="true"
readAccessProperties="Name, Age, Email, Address.City, Address.Street, Address.PostalCode"
writeAccessProperties="Name, Age, Email, Address.City, Address.Street, Address.PostalCode" />
readAccessProperties时允许读取的Profile属性。writeAccessProperties时允许写入的Profile属性
然后我们在页面上需要添加一个ScriptManager
<asp:ScriptManager ID="ScriptManager1" runat="server">
<ProfileService LoadProperties="Name, Age, Email, Address.City, Address.Street, Address.PostalCode" />
</asp:ScriptManager>
LoadProperties表明预加载的Profile的属性。
首先时读取Profile的属性
function loadProfiles()
{
//debugger;
Sys.Services.ProfileService.load(
null,
loadCompleted);
}
Sys.Services.ProfileService.load的方法详细说明如下
Sys.Services.ProfileService.load(
propertyNames, //需要加载的Profile名,null表示全取
loadCompletedCallback, //加载成功的回调函数
failedCallback, //加载失败的回调函数
userContext// 可以随意指定的上下文对象
);
读取完成之后
function loadCompleted()
{
//debugger;
var properties = Sys.Services.ProfileService.properties;
if(properties.Age)
{
get("txtName").value = properties.Name;
get("txtAge").value = properties.Age;
get("txtCity").value = properties.Address.City;
get("txtEmail").value = properties.Email;
get("txtStreet").value = properties.Address.Street;
get("txtPostalCode").value = properties.Address.PostalCode;
get("message").innerHTML = "Profile Loaded";
}
else
{
get("txtName").value = "";
get("txtAge").value = "";
get("txtCity").value = "";
get("txtEmail").value = "";
get("txtStreet").value = "";
get("txtPostalCode").value = "";
get("message").innerHTML = "Profile not Loaded";
}
}
Sys.Service.ProfileService.properties存储的就是Profile里面的属性,可以直接使用Name、Age等属性。loadCompleted是存在参数的,这里我们只是省略了。
function loadCompletedCallback(
number, // 本次加载的Profile数量
userContext, // 用户随意指定的上下文对象
methodName//即"Sys.Services.ProfileService.load"
)
读取失败的回调函数
function failedCallback(
error, // 错误对象
userContext, // 用户随意指定的上下文对象
methodName//即"Sys.Services.ProfileService.load"
)
然后就是保存Profile的属性
function saveProfiles()
{
var properties = Sys.Services.ProfileService.properties;
properties.Name = get("txtName").value;
properties.Age = parseInt(get("txtAge").value, 10);
properties.Email = get("txtEmail").value;
properties.Address.City = get("txtCity").value;
properties.Address.Street = get("txtStreet").value;
properties.Address.PostalCode = get("txtPostalCode").value;
Sys.Services.ProfileService.save(null, saveCompleted);
}
碰到象Address这样的group标签标明的属性可以使用JSon字符串来设置,并且使用properties.save方法来转换城Address的属性
properites.Address = {City : “Shanghai”,
Street: “People Square”, PostalCode: “20002”};
properties.save(…);
注意,就算在webconfig里设置了自动保存的属性,在ajax里面也不会自动保存,需要调用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"
)
ProfileService的其他属性
get_timeout()/set_timeout(time):设置或得到超时时间
defaultLoadCompletedCallback:默认读取完成属性,指定一个函数地址,函数签名与loadCompletedCallback类似
defaultSaveCompletedCallback:默认保存完成属性,指定一个函数地址,函数签名与saveCompletedCallback类似
defaultFailedCallback:默认读取或保存失败属性,指定一个函数地址,函数签名与failedCallback类似