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

推荐订阅源

博客园 - 三生石上(FineUI控件)
L
LangChain Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Blog — PlanetScale
Blog — PlanetScale
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Docker
T
Tailwind CSS Blog
T
The Blog of Author Tim Ferriss
U
Unit 42
B
Blog
N
Netflix TechBlog - Medium
T
Threat Research - Cisco Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
O
OpenAI News
M
MIT News - Artificial intelligence
D
DataBreaches.Net
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
L
LINUX DO - 热门话题
C
CERT Recently Published Vulnerability Notes
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
N
News and Events Feed by Topic
Vercel News
Vercel News
T
Tenable Blog
Security Latest
Security Latest
C
Check Point Blog
云风的 BLOG
云风的 BLOG
PCI Perspectives
PCI Perspectives
月光博客
月光博客
TaoSecurity Blog
TaoSecurity Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Project Zero
Project Zero
雷峰网
雷峰网
IT之家
IT之家
H
Hacker News: Front Page
Microsoft Security Blog
Microsoft Security Blog
B
Blog RSS Feed
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Last Week in AI
Last Week in AI
G
Google Developers Blog
Forbes - Security
Forbes - Security
The Register - Security
The Register - Security
Cyberwarzone
Cyberwarzone
小众软件
小众软件
Martin Fowler
Martin Fowler
K
Kaspersky official blog
P
Proofpoint News Feed
T
Threatpost
Google Online Security Blog
Google Online Security Blog
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - 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数据库