WebPart全接触1(如何管理自己的WebPart个性化数据)
是不是觉得WebPart存储在asp.net自带的数据库中觉得很不保险?每次做一个带WebPart的项目都必须让asp.net部署一个aspnetdb数据库,好像WebPart的数据并不能完全融入自己的系统体系中。
本文将介绍如何从Asp.net中获取WebPart个性化数据,如何存储这些数据。
1 在Asp.Net2.0中,是如何存取WebPart数据的?
在Asp.Net2.0中,默认是通过SqlPersonalizationProvider类存取数据的,提到SqlPersonalizationProvider,就不得不提他的父类PersonalizationProvider,PersonalizationProvider提供了个性化数据的一些抽象方法,来存储和读取WebPart的个性化数据,我们当然也可以建造一个 MyPersonalizationProvider来存取我们自己的个性化数据.
在此着重介绍
- SavePersonalizationBlob()
//
// 摘要:
// 将原始个性化设置数据保存到基础 Microsoft SQL Server 数据库中。
//
// 参数:
// webPartManager:
// 管理个性化设置数据的 System.Web.UI.WebControls.WebParts.WebPartManager。
//
// userName:
// System.Web.UI.WebControls.WebParts.PersonalizationScope.User 范围中要用作关键字的个性化设置信息的用户名。
//
// dataBlob:
// 要保存的数据的字节数组。
//
// path:
// 指示要保存的个性化设置信息的 System.Web.UI.WebControls.WebParts.PersonalizationScope。此值不能为null。
protected abstract void SavePersonalizationBlob(WebPartManager webPartManager, string path, string userName, byte[] dataBlob);
参数webPartManager就是你的页面上的放的webPartManager
参数path指的是你的WebPart部署在哪个页面上,在Index.aspx上还是Default.aspx上
参数userName,如果你使用了MemberShip,则返回你的UserName.
参数dataBlob,就是WebPart个性化数据,你可以存储在任意的Image字段中
如果您有一个这样的数据结构:
Id | Page | UserId | dataBlob |
0 | Index.aspx | A01 | ******** |
1 | default.aspx | A02 | ******** |
您就可以将WebPart数据掌握在自己手中了。
我们可以参考一下SqlPersonalizationProvider中是如何存储的
- LoadPersonalizationBlobs()
//
// 摘要:
// 根据指定参数从基础数据存储区加载个性化设置数据。
//
// 参数:
// sharedDataBlob:
// 为 System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared 范围返回的数据。
//
// webPartManager:
// 管理个性化设置数据的 System.Web.UI.WebControls.WebParts.WebPartManager。
//
// userName:
// System.Web.UI.WebControls.WebParts.PersonalizationScope.User 范围中要用作检索关键字的个性化设置信息的用户名。
//
// userDataBlob:
// 为 System.Web.UI.WebControls.WebParts.PersonalizationScope.User 范围返回的数据。
//
// path:
// System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared 范围中要用作检索关键字的个性化设置信息的路径。
protected abstract void LoadPersonalizationBlobs(WebPartManager webPartManager, string path, string userName, ref byte[] sharedDataBlob, ref byte[] userDataBlob);
前几个参数就不一一介绍了,它们和SavePersonalizationBlob()中使用的参数并无二致。只是个性化参数分了sharedDataBlob和userDataBlob。
如果某个WebPartManager中设置Personalization-InitialScope指定为User的,则属性的值存储在userDataBlob中;如果指定为Shared,则存储在sharedDataBlob。
或者是设置某个个性化属性
[ResourceWebDisplayName(""), Personalizable(PersonalizationScope.Shared)]
public long MyProperty
{
get {
return _myProperty; }
set { _myProperty= value; }
}
我们也参考一下SqlPersonalizationProvider是如何读取的。LoadPersonalizationBlobs
2 我们写好了MyPersonalizationProvider,怎么将它应用到我们的系统中呢?
很简单,只要在Web.config中的<System.web>节中指定
<webParts>
<personalization defaultProvider="MyPersonalizationProvider">
<providers>
<clear/>
<add name="MyPersonalizationProvider" type="MyCompany.MyPersonalizationProvider" connectionStringName="Default"/>
</providers>
</personalization>
</webParts>
至此,您就可以完全抛弃aspnetdb数据库了,再建立任何的webpart应用都不需要跑一次aspnet_regsql.exe来初始化
aspnetdb数据库