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

推荐订阅源

H
Hackread – Cybersecurity News, Data Breaches, AI and More
U
Unit 42
Vercel News
Vercel News
Martin Fowler
Martin Fowler
云风的 BLOG
云风的 BLOG
爱范儿
爱范儿
MongoDB | Blog
MongoDB | Blog
J
Java Code Geeks
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
C
Check Point Blog
N
Netflix TechBlog - Medium
Microsoft Azure Blog
Microsoft Azure Blog
aimingoo的专栏
aimingoo的专栏
博客园_首页
WordPress大学
WordPress大学
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
Last Week in AI
Last Week in AI
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
V
Visual Studio Blog
小众软件
小众软件

博客园 - 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;