每个功能激活/停用都会重复添加要素元素

时间:2010-04-13 14:42:57

标签: sharepoint moss schema web-parts

与整个范围相比,这是一个非常小的行为,但我想停下来。

我创建了一个非常非常简单的SharePoint功能。它的清单中有两个元素:一个aspx webpart页面和一个元素xml。我将解释我的元素xml,它只是在下面添加了一个模块。

 <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
    <Module Name="Pass" Url="" Path="">
      <File Url="pasq.aspx" NavBarHome="True" Type="Ghostable">
        <AllUsersWebPart WebPartZoneID="Left" WebPartOrder="0">
                  <![CDATA[
                   WARGH THIS PART DOESN'T MATTER FOR THIS QUESTION!
                  ]]>
        </AllUsersWebPart>
      </File>
    </Module>
</Elements>

现在,我第一次部署并激活此功能时,它可以正常工作。但是,如果我必须停用然后重新激活该功能以修复webpart中的某些属性,那么我发现自己在页面上有第二个webpart。当然,每个类似的周期都会增加越来越多。我知道必须创建一个新的webpart才能使用我刚才所做的更改,但为什么旧的webpart仍然在页面上?我是否可以将此较旧的webpart作为功能激活/停用过程的一部分自动消失,而无需使用Receiver类?

修改 基于我已经使用Receiver到solve this issue的事实,我最终只是添加了webpart删除作为功能停用的一部分。但我仍然希望可能有一些我不知道的东西。

2 个答案:

答案 0 :(得分:2)

不幸的是,除非您执行以下操作之一,否则将重复内容:

解决方案1:您可以在激活功能中添加类似的代码,以便在页面中添加webparts,如下所示:

SPFile file = page.File;
using (SPLimitedWebPartManager WebPartManager =
        file.GetLimitedWebPartManager(PersonalizationScope.Shared))
{
    try
    {
        SPLimitedWebPartCollection webparts = WebPartManager .WebParts;
        if (webparts.Count == 0)
        {
            //set your web part 
            WebPartManager.AddWebPart(webpart, "MomoZone", 1);
        }
    }
    catch(Exception ex)
    {
        throw;
    }
    finally
    {
        WebPartManager.Web.Dispose();
    }
}

解决方案2:您可以使用网站定义和仅在创建网站后运行的Onet文件,这样在将您的efatures设置为隐藏时就不会出现此问题

干杯

答案 1 :(得分:1)

SharePoint不提供声明性方式(xml)来自动删除要素元素。您必须在功能接收器上的FeatureDeactiving方法中添加一些代码,以编程方式将其删除,抱歉。