小技巧,在Control中调用Profile
只是个小技巧,没弄明白之前可费了我不少的劲啊。。
在ASP.NET Page中,我们可以直接使用Profile.A的方式调用A这个Profile值,强类型的,非常方便。
可是Profile这个属性是Page类的一个私有属性,在控件中是没有权限调用的,而我们可能会有这方面的需求。比如说我们用Profile保存了当前的Culture值,我们要获取这个值实现控件对常用语言的自动本地化等。
下面是我反复研究得出的代码,考虑了匿名的情况,假设我现在在Web.Config中定义了一个String类型的属性Culture,我在控件的CreateChildControls方法中要调用这个Cultrue的值,可以这样写:
这里需要注意的是Profile的一个原理,登陆以后自然就是靠用户名识别,在未登陆之前,会根据客户端的相应参数生成一个GUID,这个GUID会充当和UserName相同的作用,Profile内部存在一种机制,可以在匿名用户注册登陆以后,把原来匿名登陆的资料转过来。
其实是很简单的代码,希望对和我一样曾经迷惘的人起到帮助把。。。
在ASP.NET Page中,我们可以直接使用Profile.A的方式调用A这个Profile值,强类型的,非常方便。
可是Profile这个属性是Page类的一个私有属性,在控件中是没有权限调用的,而我们可能会有这方面的需求。比如说我们用Profile保存了当前的Culture值,我们要获取这个值实现控件对常用语言的自动本地化等。
下面是我反复研究得出的代码,考虑了匿名的情况,假设我现在在Web.Config中定义了一个String类型的属性Culture,我在控件的CreateChildControls方法中要调用这个Cultrue的值,可以这样写:
protected override void CreateChildControls()
{
string userName = Page.User.Identity.IsAuthenticated ? Page.User.Identity.Name : Page.Request.AnonymousID;
ProfileBase profile = ProfileBase.Create(userName);
string currentCultrue = profile.GetPropertyValue("Culture").ToString();
}
{
string userName = Page.User.Identity.IsAuthenticated ? Page.User.Identity.Name : Page.Request.AnonymousID;
ProfileBase profile = ProfileBase.Create(userName);
string currentCultrue = profile.GetPropertyValue("Culture").ToString();
}
这里需要注意的是Profile的一个原理,登陆以后自然就是靠用户名识别,在未登陆之前,会根据客户端的相应参数生成一个GUID,这个GUID会充当和UserName相同的作用,Profile内部存在一种机制,可以在匿名用户注册登陆以后,把原来匿名登陆的资料转过来。
其实是很简单的代码,希望对和我一样曾经迷惘的人起到帮助把。。。