【发布时间】:2014-02-21 21:23:14
【问题描述】:
我有一个事件接收器,用于更新列表项(ItemUpdated 而不是 ItemUpdating)。然后在接收器内部,我再次更新列表项。正如我所料,这自然会引发一些递归事件调用。在事件处理程序的开头放置一个断点,我数它在事件中停止 10 次,然后它就结束了。 SharePoint 内部是否有某种递归保护来防止此类事情发生?
【问题讨论】:
标签: c# sharepoint event-handling
我有一个事件接收器,用于更新列表项(ItemUpdated 而不是 ItemUpdating)。然后在接收器内部,我再次更新列表项。正如我所料,这自然会引发一些递归事件调用。在事件处理程序的开头放置一个断点,我数它在事件中停止 10 次,然后它就结束了。 SharePoint 内部是否有某种递归保护来防止此类事情发生?
【问题讨论】:
标签: c# sharepoint event-handling
使用 DisableEventFiring 方法
base.DisableEventFiring();
item.update();
base.EnableEventFiring();
【讨论】:
更安全的方法:
try {
this.DisableEventFiring();
item.SystemUpdate(); // or item.Update(); or item.UpdateOverwriteVersion();
} finally {
this.EnableEventFiring();
}
以防万一您的更新调用由于某种原因失败。
【讨论】:
现代方式(未贬低):
EventFiringEnabled = false;
item.Update();
EventFiringEnabled = true;
【讨论】:
或者使用 item.SystemUpdate(),SystemUpdate 会在不触发任何附加到 item 的事件的情况下进行更新。
【讨论】: