在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
声明:欢迎各大网站转载本站文章,还请保留一条能直接指向本站的超级链接,谢谢!
时间:2008-06-25 21:46:28,点击:65824
【声明】:以上文章或资料除注明为Office自创或编辑整理外,均为各方收集或网友推荐所得。其中摘录的内容以共享、研究为目的,不存在任何商业考虑。如有任何异议,请与本站联系,本站确认后将立即撤下。谢谢您的支持与理解!
相关评论
我要评论
评论内容
相关文章
推荐文章