我只有1个Visual Studio项目。

它包含1个EventReceiver(用于DocumentLibrary)和多个WebParts。 我已经定义了项目的scope= site的项目。

我在EventReceiver中创建了1个自定义函数,在每个事件上呼叫都会在我的文档整齐中拨打/更新/删除。

当我通过逼到项目来部署它时,一切正常工作,但是当我创建任何页面或任何项目被添加到我的任何CustomList中,那么EventReceiver也是火灾。虽然它是在DocumentLibrary上创建的。 它没有给我任何错误,但我不想再次调用它。

但是当我通过f5调试项目时,我在eventReceiver中获得错误,因为它在每个事件中都被称为多次。

如果我部署了EventReceiver的范围= Web,那么可能是它将解决问题,但我需要使用范围=网站部署WebParts。 所以如何通过单一部署来解决这个问题?

有帮助吗?

解决方案

您可以向项目添加第二个功能。在这种情况下,您将有一个具有两个功能的一个解决方案包(首先是一个站点范围特征,第二个是一个Web范围特征)。在网站范围内的功能中,您可以包含您的Web部件。要做到这一点,您应该单击功能文件夹,然后选择“添加新功能”选项。

其他提示

我怀疑您将事件接收器绑定到文档库模板,您的自定义列表也可以使用,因此事件接收器绑定到两个列表实例。

如果我需要将事件接收器绑定到特定列表,那么我在代码中执行此操作,通常通过这样的功能激活和codd:

    protected static void AddEventReceiverToList(string name, string className, SPList list, string assemblyName, SPEventReceiverType eventReceiverType, SPEventReceiverSynchronization eventReceiverSynchronization)
    {
        if (name == null) throw new ArgumentNullException("name");
        if (className == null) throw new ArgumentNullException("className");
        if (list == null) throw new ArgumentNullException("list");
        if (assemblyName == null) throw new ArgumentNullException("assemblyName");
        SPEventReceiverDefinitionCollection eventReceiverDefinitionCollection = list.EventReceivers;

        foreach (SPEventReceiverDefinition eventReceiverDefinition in eventReceiverDefinitionCollection)
        {
            if (eventReceiverDefinition.Name == name)
            {
                return;
            }
        }

        SPEventReceiverDefinition eventReceiver = eventReceiverDefinitionCollection.Add();
        eventReceiver.Name = name;
        eventReceiver.Synchronization = eventReceiverSynchronization;
        eventReceiver.Type = eventReceiverType;
        eventReceiver.Assembly = assemblyName;
        eventReceiver.Class = className;
        eventReceiver.Update();
    }
.

许可以下: CC-BY-SA归因
scroll top