如果你使用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);
}
}