SharePoint:从ContentType注销EventReceiver时出现错误

3

我在取消一些与内容类型相关的事件接收器时遇到了一些问题。这些内容类型和接收器是由我自己部署和注册的,因此我不会尝试删除任何 MOSS 内置或内部事件接收器。

我尝试使用以下代码片段来实现:

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()"抛出异常并告诉我无法修改集合。正如您在代码中看到的,我已经尝试了不同的方法来解决这个问题,如允许不安全的更新或使用提升的权限运行此代码。但我总是得到同样的异常。

那么我做错了什么?

3个回答

6

你的问题在于 "AvailableContentTypes" 属性返回了一个只读集合。

你应该使用 'ContentTypes' 属性,一切都会很好。

祝好,

Dug。


0

这个类型是基于发布类型吗?我曾经尝试过更改这些类型时遇到了问题。否则,您可以尝试更改整个类型的SchemaXml。我发现当其他方法无法解决问题时,有时候这种方法是有效的。


0

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

此外,您的SPWeb不需要被处理 - 有关更多详细信息,请参见Roger Lamb的博客


谢谢你的提示,不再处理RootWeb。 - Flo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接