惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
O
OpenAI News
V
V2EX
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
S
Schneier on Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
小众软件
小众软件
L
LINUX DO - 热门话题
C
Cybersecurity and Infrastructure Security Agency CISA
博客园 - Franky
Security Latest
Security Latest
S
SegmentFault 最新的问题
Project Zero
Project Zero
Spread Privacy
Spread Privacy
K
Kaspersky official blog
J
Java Code Geeks
V
Vulnerabilities – Threatpost
C
Cisco Blogs
C
CERT Recently Published Vulnerability Notes
月光博客
月光博客
T
The Exploit Database - CXSecurity.com
L
Lohrmann on Cybersecurity
人人都是产品经理
人人都是产品经理
博客园 - 三生石上(FineUI控件)
Scott Helme
Scott Helme
WordPress大学
WordPress大学
量子位
T
Threat Research - Cisco Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
宝玉的分享
宝玉的分享
Hugging Face - Blog
Hugging Face - Blog
AWS News Blog
AWS News Blog
Help Net Security
Help Net Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Simon Willison's Weblog
Simon Willison's Weblog
S
Secure Thoughts
博客园 - 【当耐特】
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
V
Visual Studio Blog
Last Week in AI
Last Week in AI
T
Tailwind CSS Blog
腾讯CDC
Cyberwarzone
Cyberwarzone
IT之家
IT之家
GbyAI
GbyAI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
云风的 BLOG
云风的 BLOG
T
Troy Hunt's Blog
D
Docker

博客园 - Aldebaran's Home

copy 命令复制大批文件时不覆盖现有文件 DataTable 与 Entity 间的转换工具 Levenshtein distance算法:计算两个字符串的差异 SQL 调优 IE 与 FireFox差别 ---javascript 我的常用工具 Html的一些小东西 - Aldebaran's Home - 博客园 职业发展三岔口-技术还是管理?那太难抉择了 Nhibernate学习点滴<一> 配置注意事项 - Aldebaran's Home 比尔·盖茨 经典语录 您的PC还处于待机中吗?让他参与科学计算吧! 关于控件的中事件的执行顺序的问题? 所有管理者最关心的问题-如何激发员工高绩效地工作? (转) 幻灯片 - Aldebaran's Home - 博客园 2007工作总结 发现一些有趣的工具 关于动态添加AsyncPostBackTrigger失效的问题 工作一个月的感想 自己写的一个字符索引器,有关于效率和代价问题请教各位
WebPart全接触1(如何管理自己的WebPart个性化数据)
Aldebaran's Home · 2008-07-18 · via 博客园 - Aldebaran's Home

是不是觉得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数据库