Sharepoint 2010事件接收器不为子网站触发

时间:2011-04-06 08:37:44

标签: sharepoint-2010 eventreceiver

我有一个事件接收器(WebAdding和WebProvisioned),它适用于从网站集根目录创建的网站。但是,子网站(例如,在其他区域内创建的团队)根本不会触发代码。

有没有人知道为什么?

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

namespace TestEventReceiver.EventReceiver1
{
  /// <summary>
  /// Web Events
  /// </summary>
  public class EventReceiver1 : SPWebEventReceiver
  {
    /// <summary>
    /// A site is being provisioned.
    /// </summary>
    public override void WebAdding(SPWebEventProperties properties)
    {
      base.WebAdding(properties);

      using (SPWeb web = properties.Web)
      { 
        StringBuilder output = new StringBuilder();
        output.AppendFormat("Web Adding");
        output.AppendFormat("<br>Web title: {0}",web.Title);
        SendMyEmail(web, "SendItToMe@MyTestAddress.com", "Web Adding", output.ToString());
      }
    }

    /// <summary>
    /// A site was provisioned.
    /// </summary>
    public override void WebProvisioned(SPWebEventProperties properties)
    {
      base.WebProvisioned(properties);
      using (SPWeb web = properties.Web)
      {
        StringBuilder output = new StringBuilder();
        output.AppendFormat("Web Provisioned");
        output.AppendFormat("<br>Web title: {0}", web.Title);
        SendMyEmail(web, "SendItToMe@MyTestAddress.com", "Web Provisioned", output.ToString());
      }
    }

    private void SendMyEmail(SPWeb Web, String toAddress, String subject, String message)
    {
      bool appendHtmlTag = false;
      bool htmlEncode = true;
      SPSecurity.RunWithElevatedPrivileges(delegate()
      {
        SPUtility.SendEmail(Web, appendHtmlTag, htmlEncode, toAddress, subject, message);
      });

    }

  }
}

提前致谢, 马特

5 个答案:

答案 0 :(得分:2)

我认为你不应该使用'使用'。 您获得的SPWeb对象引用来自properties.Web,它将被传递给WebAdding方法。因此,你会遇到问题。

答案 1 :(得分:1)

了解您的事件接收器是如何配置的 - 可能需要将范围更改为Site而不是Web。也许你可以在这里发帖,我们可以看到。

答案 2 :(得分:1)

在我的网站上,我遇到了同样的问题。仍在计算xml文件,但在我的接收器的Elements.xml文件中,每个接收器具有相同的序列号。一旦我在Elements.xml文件中使它们唯一,WebProvisioned事件就开始触发。不知道这是否与您遇到的问题相同。

答案 3 :(得分:0)

此代码显示WebAdding事件,该事件正在父Web上发生。

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spwebeventreceiver.webadding.aspx

答案 4 :(得分:0)

尝试更改接收器的范围(在Elements.xml文件中添加属性)。此外,请确保在子网站中的站点功能中激活了事件接收器的功能。