C# Sharepoint-升级Web部件属性
我正在玩SharePoint 2010,但遇到了一个问题。 有一个功能负责web部件-它的范围是web。需要更新已经创建的Web部件的某些属性,例如-title 所以我已经覆盖了FeatureUpgrading事件,并将自定义升级操作添加到功能清单中——这里没有问题。 在这个FeatureReceiver中,我计划编写一个代码,该代码应该能够获取包含所需页面的文件,将其签出,遍历其中的所有web部件,更改属性,然后签回页面。 问题是我的所有网页部件都显示为标题为空的ErrorWebPart 顺便说一下,如果我在FeatureDeactivating事件中使用相同的代码,那么一切都很好。 我注意到的唯一区别是,在featureupgrading HttpContext.Current中为空。所以我已经手动填充了它,但没有任何帮助。 在谷歌搜索时,只有两条建议:填充HttpContext并确保带有Web部件的LIB在GAC中。这两个条件在我的情况下都适用 FeatureUpgrading中的示例代码如下所示:C# Sharepoint-升级Web部件属性,c#,.net,sharepoint,sharepoint-2010,C#,.net,Sharepoint,Sharepoint 2010,我正在玩SharePoint 2010,但遇到了一个问题。 有一个功能负责web部件-它的范围是web。需要更新已经创建的Web部件的某些属性,例如-title 所以我已经覆盖了FeatureUpgrading事件,并将自定义升级操作添加到功能清单中——这里没有问题。 在这个FeatureReceiver中,我计划编写一个代码,该代码应该能够获取包含所需页面的文件,将其签出,遍历其中的所有web部件,更改属性,然后签回页面。 问题是我的所有网页部件都显示为标题为空的ErrorWebPart 顺便
SPUtility.ValidateFormDigest();
web.AllowUnsafeUpdates = true;
var request = new HttpRequest("", web.Url, "");
HttpContext.Current = new HttpContext(request, new HttpResponse(new StringWriter()));
HttpContext.Current.Items["HttpHandlerSPWeb"] = web;
var fileUrl = web.Url + "/pages/sample.aspx";
var file = web.GetFile(fileUrl);
if (file.CheckOutType == SPFile.SPCheckOutType.None)
{
file.CheckOut();
}
using (var webPartsManager = file.GetLimitedWebPartManager(PersonalizationScope.Shared))
{
foreach (WebPart webPart in webPartsManager.WebParts)
{
Console.WriteLine(webPart.GetType().ToString());
}
}
file.CheckIn("System update");
非常感谢您的帮助。也许我遗漏了什么,或者有另一种变体来完成所描述的任务
关于。由于它正在禁用(),我认为激活功能的顺序是问题所在。
您可能必须确保以下各项:
1.首先激活添加Web部件的功能
2.然后激活新功能
您可以在软件包中更改此项。或者最好为新功能添加一个依赖项。如果尝试从Visual Studio收回项目、重新生成并重新部署,会发生什么情况?以前我尝试在同一台计算机上进行干净安装,升级的结果相同。升级过程中-没有激活/停用。Web部件已经存在。第二个功能负责在FeatureUpgrading handler中升级这些现有的Web部件。Web部件的数量正确,但它们确实显示为ErrorWebPart。