【问题标题】:SharePoint: Error on unregistering an EventReceiver form a ContentTypeSharePoint:从 ContentType 注销 EventReceiver 时出错
【发布时间】:2010-10-10 03:00:55
【问题描述】:

我在从内容类型中注销某些事件接收器时遇到了一些问题。内容类型和接收器是我自己部署和注册的,所以我不会尝试删除任何 MOSS 内置或内部事件接收器。

我尝试使用以下代码 sn-p 存档:

using (SPSite site = new SPSite("http://wssdev06/"))
        {
            using (SPWeb web = site.RootWeb)
            {
                // web.AllowUnsafeUpdates = true;

                SPContentType type = web.AvailableContentTypes[<ContentTypeName>];

                while (type.EventReceivers.Count > 0)
                {
                    type.EventReceivers[0].Delete();                        
                }

                type.Update();

                // web.AllowUnsafeUpdates = false;
            }
        }

不幸的是,命令“type.Update()”抛出一个异常,告诉我无法修改集合。正如您在代码中看到的那样,我已经尝试了不同的方法来解决此问题,例如允许不安全的更新或以提升的权限运行此代码。但我总是得到同样的例外。

那我做错了什么?

【问题讨论】:

    标签: sharepoint events moss content-type event-receiver


    【解决方案1】:

    您的问题是“AvailableContentTypes”属性返回一个只读集合。

    您还应该使用“ContentTypes”属性,一切都应该没问题。

    问候,

    挖。

    【讨论】:

      【解决方案2】:

      类型是否基于发布类型?我在更改这些类型时遇到了问题。否则,您可能会尝试更改该类型的整个 SchemaXml。我发现这有时会在其他方法不起作用时起作用。

      【讨论】:

        【解决方案3】:

        您应该能够设置type.ReadOnly = false 以启用对该类型的写入。

        同样,您的 SPWeb 也不需要处理 - 有关详细信息,请参阅 Roger Lamb's blog here

        【讨论】:

        • 感谢提示不要再处理 RootWeb。
        猜你喜欢
        • 2016-03-07
        • 1970-01-01
        • 2012-09-13
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 2011-06-26
        • 1970-01-01
        相关资源
        最近更新 更多