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

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
G
Google Developers Blog
罗磊的独立博客
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
A
About on SuperTechFans
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
GbyAI
GbyAI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
The Register - Security
The Register - Security
U
Unit 42
D
Docker
Martin Fowler
Martin Fowler
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
Google DeepMind News
Google DeepMind News

博客园 - IORICC

jQuery的timeOut超时设置和event事件处理 动态调用WebService javascript获取.net控件的ClientId - IORICC - 博客园 解决第三方DLL没有强签名的问题 批处理命令大全 命令行编译Solution(转) 用SQL语句修改字段的默认值 C#中反射调用带out参数的方法 - IORICC - 博客园 截屏Code 自定义数据类型 如何创建和使用Web Service代理类 乘法 Javascript制作进度条 用C#实现HTTP协议下的多线程文件传输 javascript读写XML文件 XML动态查询 XML动态排序(1) VS.NET 2003 控件命名规范 Transact_SQL小手册
使用代码管理SharePoint页面中的WebPart
IORICC · 2010-09-28 · via 博客园 - IORICC

SharePoint中的WebPart功能很强大,通过界面可以定制共享视图中的WebPart也可以定制个性化视图中的WebPart。

但是有的SharePoint项目可能需要通过feature向SharePoint的页面中添加WebPart,下面介绍如何实现通过代码管理SharePoint页面中的WebPart。

方案:通过SPSite->SPWeb->SPFolder得到SPFile,通过 SPFile.GetLimitedWebPartManager 方法获取SPWebPartManager(Provides a limited set of Web Part operations that can be performed in our object model scenarios when there is no HttpContext and no Page object is instantiated.),通过SPWebPartManager来操作页面中的WebPart,下面是示例代码:

//get the current web; not using "using" because we don't want to

//kill the web context for other controls that need it

SPWeb curWeb = SPContext.Current.Web;

//look to see if our code has already run

if (! curWeb.Properties.ContainsKey(KEY_CHK))

The next thing is to get a reference to the home page in the site:

//look for the default page so we can mess with the web parts

SPFile thePage = curWeb.RootFolder.Files["default.aspx"];

With the home page, you can get the web part manager for it:

//get the web part manager

SPLimitedWebPartManager theMan = thePage.GetLimitedWebPartManager

(System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);

//create a hashtable to store our web parts

hshWp = new Hashtable();

foreach (WebPart wp in theMan.WebParts)

{

//close the welcome part; WebPartAction is a custom class

//I wrote to keep track of web parts and their properties

if (wp.GetType().Equals(typeof(PersonalWelcomeWebPart)))

hshWp.Add(wp.StorageKey.ToString(),

new WebPartAction(wp,

WebPartAction.ActionType.Delete));

//etc

}

//add a new ThisWeekInPictures web part

ThisWeekInPicturesWebPart wpPix = new ThisWeekInPicturesWebPart();

wpPix.ImageLibrary = "Shared Pictures";

wpPix.Title = "My Pictures";

//add it to the hash so it gets put in the page

hshWp.Add(Guid.NewGuid().ToString(),

new WebPartAction(wpPix, WebPartAction.ActionType.Add,

"MiddleRightZone", 10));

Finally, the code enumerates through the hashtable and makes all of the web part changes:

foreach (string key in hshWp.Keys)

{

WebPartAction wpa = (WebPartAction)hshWp[key];

switch (wpa.Action)

{

case WebPartAction.ActionType.Delete:

theMan.DeleteWebPart(wpa.wp);

break;

case WebPartAction.ActionType.Move:

theMan.MoveWebPart(wpa.wp, wpa.zoneID, wpa.zoneIndex);

theMan.SaveChanges(wpa.wp);

break;

case WebPartAction.ActionType.Add:

theMan.AddWebPart(wpa.wp, wpa.zoneID, wpa.zoneIndex);

break;

}

}

//look to see if our code has already run

if (! curWeb.Properties.ContainsKey(KEY_CHK))

//add our key to the property bag so we don't run

//our provisioning code again

curWeb.Properties.Add(KEY_CHK, "true");

curWeb.Properties.Update();

curWeb.AllowUnsafeUpdates = false;