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

那么我做错了什么?

4

3 回答 3

6

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

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

问候,

挖。

于 2009-02-27T10:18:35.970 回答
0

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

于 2009-02-26T21:21:41.533 回答
0

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

同样,您的 SPWeb 也不需要处理 - 请参阅此处的 Roger Lamb 博客了解更多详细信息。

于 2009-02-26T21:32:52.537 回答