Skip to main content
 首页 » 编程设计

c#之在扩展 Web 应用程序上使用 SPListEventReceiver

2024年01月13日31dudu

我有一个站点使用用于管理员(后端)的 Windows 窗体身份验证。该站点有一个使用 FBA 的 Web 扩展站点,是普通用户(前端)可以访问的站点。

为了完成一些实现,我创建了一个自定义 SPListEventReceiver 并将其附加到主要网站的一个特定列表。

因此,当我对项目进行更改时,将抛出自定义处理程序,并且监听事件的单例会使用来自 SharePoint 列表的更新信息更新单例元素。问题:没有通知扩展站点,因此驻留在扩展站点上下文中的单例不会收到有关 SharePoint 列表更改的通知。

我必须如何注册 SPListEventReceiver 才能在扩展站点上接收项目更改通知?

类代码

    public class CampagnasListItemEventReceiver : SPItemEventReceiver 
    { 
        /// <summary> 
        /// An item was added. 
        /// </summary> 
        public override void ItemAdded(SPItemEventProperties properties) 
        { 
            base.ItemAdded(properties); 
            // DoSomething 
 
        } 
} 

一个Elements.xml

<?xml version="1.0" encoding="utf-8"?> 
<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> 
  <Receivers > 
      <Receiver> 
        <Name>CampagnasListEventReceiverListAdded</Name> 
        <Type>ListAdded</Type> 
        <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly> 
        <Class>{Class Namespace}</Class> 
        <SequenceNumber>10000</SequenceNumber> 
      </Receiver> 
  </Receivers> 
</Elements> 

有什么帮助吗? 提前致谢。

更新:我正在使用单例模式将列表管理到 C# 单例类中,该类使用 SharePoint 列表信息 poblated,因此在更新 SharePoint 列表时我需要更新该 c# 列表,它在主站点(后端)上工作) 但前端没有收到通知。

请您参考如下方法:

@rolivares - 我对你的问题的理解是你有一个内存列表,当有人在你的管理站点上添加一个项目时你想要更新它。您已经使用单例对象实现了它。但是,当事件接收器在管理站点上触发时,该列表不会在您的扩展站点(前端)上更新。

虽然这 2 个“站点”指向相同的内容数据库,但 IIS 将它们作为单独的应用程序运行,因此您将有 2 个不同的内存列表实例。这就是为什么您的前端没有更新的原因。