C# Sharepoint-升级Web部件属性

C# Sharepoint-升级Web部件属性,c#,.net,sharepoint,sharepoint-2010,C#,.net,Sharepoint,Sharepoint 2010,我正在玩SharePoint 2010,但遇到了一个问题。 有一个功能负责web部件-它的范围是web。需要更新已经创建的Web部件的某些属性,例如-title 所以我已经覆盖了FeatureUpgrading事件,并将自定义升级操作添加到功能清单中——这里没有问题。 在这个FeatureReceiver中,我计划编写一个代码,该代码应该能够获取包含所需页面的文件,将其签出,遍历其中的所有web部件,更改属性,然后签回页面。 问题是我的所有网页部件都显示为标题为空的ErrorWebPart 顺便

我正在玩SharePoint 2010,但遇到了一个问题。 有一个功能负责web部件-它的范围是web。需要更新已经创建的Web部件的某些属性,例如-title

所以我已经覆盖了FeatureUpgrading事件,并将自定义升级操作添加到功能清单中——这里没有问题。 在这个FeatureReceiver中,我计划编写一个代码,该代码应该能够获取包含所需页面的文件,将其签出,遍历其中的所有web部件,更改属性,然后签回页面。 问题是我的所有网页部件都显示为标题为空的ErrorWebPart

顺便说一下,如果我在FeatureDeactivating事件中使用相同的代码,那么一切都很好。 我注意到的唯一区别是,在featureupgrading HttpContext.Current中为空。所以我已经手动填充了它,但没有任何帮助。 在谷歌搜索时,只有两条建议:填充HttpContext并确保带有Web部件的LIB在GAC中。这两个条件在我的情况下都适用

FeatureUpgrading中的示例代码如下所示:

 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。