在MOSS2007中,我们通常会为列表添加许多eventhandler事件处理程序,但总有一个问题,就是怎么将这些Eventhandler移除掉,在网上搜了下,一直没找到好的解决方法,无非将这个dll从GAC中删除掉,或者重新步一个空的程序集,不过始终觉得这种方式,怎么说呢,比较“土”(万一不记得名字了。。。),呵呵,从老外的一个博客上突然得到了一个思路,用另外一种方式添加这个dll,这种方式的好处是能给这个dll分配一个Guid,这样我们就可以找到它,从而将它删除。
通常,我们使用如下方式来为列表注册一个Eventhandler事件处理程序(早肥兄教程里也是用的这种方式):
SPSite site = new SPSite(siteurl);
site.OpenWeb(weburl);
SPList list = web.Lists[列表名字];
list.EventReceivers.Add(事件类型,程序集名称,类名);
每个 SPList 对象都具有一个 EventReceivers 集合。EventReceivers 集合公开了一个具有三种不同重载实现的 Add 方法。这个Add 方法是添加Eventhandler的最简单方法,它要求传递三个参数。如果您希望通过代码绑定事件处理程序,至少必须提供程序集的名称、命名空间限定的类名,以及使用来自 WSS 对象模型的 SPEventReceiverType 枚举的事件类型。调用 Add 方法是最简单的方法,但不是在所有情况下都很灵活。
以下代码说明了一个更加复杂的方法,其中事件处理程序绑定通过直接对 SPEventReceiverDefinition 对象进行编程来完成。这样您就有机会为绑定指定一个特定的 GUID 标识符,以便可以更轻松地添加和删除它们。它还使您能够初始化 SequenceNumber 属性和 Data 属性。
SPList SalesLeadsList=web.Lists[列表名字];
SPEventReceiverDefinitionCollection receivers;
receivers = SalesLeadsList.EventReceivers;
Guid ItemAddingDefId=new Guid();
ItemAddingDefId = new Guid("2D96ADCE-E7A9-461b-8DB6-1E4309419503");//指定Guid
if(!receivers.EventReceiverDefinitionExist(ItemAddingDefId))
{
SPEventReceiverDefinition ItemAddingDef;
ItemAddingDef = receivers.Add(ItemAddingDefId);
ItemAddingDef.Name = "ItemDeleteingHandler";
ItemAddingDef.Type = 事件类型;
ItemAddingDef.Assembly = 程序集名称;
ItemAddingDef.Class = 类名;
ItemAddingDef.Data = "today";
ItemAddingDef.SequenceNumber = 1001;
ItemAddingDef.Update();
}
这样我们就为该程序集指定了一个Guid,并通过这个Guid来删除掉它。
if (receivers.EventReceiverDefinitionExist(ItemAddingDefId))
{
receivers[ItemAddingDefId].Delete();
}
小结:单纯的从GAC里将Eventhandler卸载了,在执行添加更新删除时,列表肯定还会去找这个Eventhandler,这与上种方式速度上肯定有差异,类似于在页面上隐藏掉某些东西与删除掉某些东西(相信很多同仁在修改首页或模板页都做过这些事情,呵呵)吧,做事要有始有终。
作者:whalelover
相关文章
同类最新