C# 事件接收器未启动-文档库

C# 事件接收器未启动-文档库,c#,visual-studio,sharepoint-2013,sharepointdocumentlibrary,event-receiver,C#,Visual Studio,Sharepoint 2013,Sharepointdocumentlibrary,Event Receiver,我的虚拟机中有一个本地开发环境。(SharePoint server 2013 SP1,Visual Studio Ultimate 2013-update3)。我正在尝试在ItemDelete时将事件接收器添加到文档库。将文档删除到文档库会将项目添加到我的自定义列表“日志”中。下面是我的编码: Event.cs using System; using System.Security.Permissions; using Microsoft.SharePoint; using M

我的虚拟机中有一个本地开发环境。(SharePoint server 2013 SP1,Visual Studio Ultimate 2013-update3)。我正在尝试在ItemDelete时将事件接收器添加到文档库。将文档删除到文档库会将项目添加到我的自定义列表“日志”中。下面是我的编码:

Event.cs

  using System;
  using System.Security.Permissions;
  using Microsoft.SharePoint;
  using Microsoft.SharePoint.Utilities;
  using Microsoft.SharePoint.Workflow;

  namespace SharePointProject1.EventReceiver1
     {
     public class EventReceiver1 : SPItemEventReceiver
    {

    public override void ItemDeleting(SPItemEventProperties properties)
    {
        //base.ItemDeleting(properties);
        using (SPWeb web = properties.OpenWeb())
        {
            try
            {
                SPList list = web.Lists["Log"];
                SPListItem newItem = list.Items.Add();
                newItem["Title"] = properties.ListItem.Name;
                newItem["DateAndTime"] = System.DateTime.Now;
                newItem["Action"] = "Item Deleted";
                newItem.Update();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
   }
Element.xml

   <?xml version="1.0" encoding="utf-8"?>
   <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
   <!-- <Receivers ListTemplateId="101" > -->
   <Receivers ListUrl ="Doclib"
   <Receiver>
  <Name>EventReceiver1ItemDeleting</Name>
  <Type>ItemDeleting</Type>
  <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
  <Class>SharePointProject1.EventReceiver1.EventReceiver1</Class>
  <SequenceNumber>10000</SequenceNumber>
  </Receiver>
  </Receivers>
  </Elements>


我认为在这种情况下你需要解决两件事

  • 更新列表项后,alsp将更新列表本身,您还应在更新列表前将web.allunsfaeupdates设置为true,并在更新列表项后将其设置为false
  • 另一件事是注释掉了行//base.itemdeleding(properties)

    请取消注释,它可能会解决您的问题

    关于第二个问题

    它将需要列表的URI而不是列表名生成列表的路径并提供它,然后它将工作

    让我知道结果


    谢谢

    是否要为所有文档库启动此事件接收器。 如果没有,最好是在sharepoint项目的功能激活部分注册event reiver

    public override void FeatureActivated(SPFeatureReceiverProperties properties) 
    { 
        SPWeb oWeb = (SPWeb)properties.Feature.Parent;    
        SPList list=oWeb.List["ListNameorDocLibName"];
        list.EventReceivers.Add(_theeventRecieverType, Assembly.GetExecutingAssembly           ().FullName, "EventReceiverProject1.EventReceiver1.EventReceiver1");
        list.Update();
    }
    
    如果你这样做的话,你就不必担心URL和事件接收者会被触发

    public override void FeatureActivated(SPFeatureReceiverProperties properties) 
    { 
        SPWeb oWeb = (SPWeb)properties.Feature.Parent;    
        SPList list=oWeb.List["ListNameorDocLibName"];
        list.EventReceivers.Add(_theeventRecieverType, Assembly.GetExecutingAssembly           ().FullName, "EventReceiverProject1.EventReceiver1.EventReceiver1");
        list.Update();
    }