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中是如何存储的

SavePersonalizationBlob

 

  • 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数据库
posted @ 2008-07-18 17:25  Aldebaran's Home  阅读(2251)  评论(7编辑  收藏  举报