Sharepoint2007 EventHandler中实现页面跳转

来源:互联网 发布:linux启动过程 编辑:程序博客网 时间:2024/06/10 23:08

如果你使用ItemAdded, 你会发现你的HttpContext.Current对象是null.ItemAdded和ItemUpdated属于异步(asynchronous )事件,而HttpContext对象仅在同步(synchronous )事件中才可获取.那我们就应该使用ItemAdding了. 可是还有一个问题, 如果你使用ItemAdding事件的话, 你会发现如果执行了跳转, 你的item并不会被加入到列表中!这是因为, 一旦执行了跳转, 那么ItemAdding的线程就会被终止, item也就永远不会添加到list中了.解决方案有点麻烦, 需要你手工地添加你的item, 即在ItemAdding事件中, 手动地拿到SPList对象, 然后执行SPList.Add()方法.

代码:


public class CustomEventReceiver : SPItemEventReceiver{ private HttpContext _currentContext = null; public CustomEventReceiver () : base () { if (null != HttpContext.Current) { _currentContext = HttpContext.Current } } public override void ItemAdding (SPItemEventProperties properties) { // Get a "reference" to the list SPSite siteColl = new SPSite (properties.SiteId); SPWeb site = siteColl.OpenWeb (properties.RelativeWebUrl) ;SPList list = site.Lists[properties.ListId]; // Add the item and fill it with the values from properties DisableEventFiring (); SPListItem itemToAdd = list.Items.Add ();EnableEventFiring (); // Cleanup site.Dispose ();siteColl.Dispose (); // Redirect SPUtility.Redirect (targetUrlOfNewItem, SPRedirectFlags.Default, _currentContext); }}