SPItemEventReceiver.ItemUpdated:删除与properties.ListItem中相同的SPListItem

时间:2012-11-13 22:31:58

标签: c# sharepoint-2010

所以,我有这段代码:

public override void ItemUpdated(SPItemEventProperties properties)
{
    base.ItemUpdated(properties);

    SPListItem newItem = AMethodWhichGetsANewListItem();   
    properties.ListItem.ParentList.GetItemById(properties.ListItemId).Delete();

    properties.Cancel = true;
    properties.InvalidateListItem();
    properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;
    properties.RedirectUrl = newItem.ParentList.DefaultDisplayFormUrl + "=" + newItem.ID;
}

此事件现在在其属性中有一个ListItem,该属性不可用。 在此之后,我无法取消或重定向。

错误日志显示:

`System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.    at Microsoft.SharePoint.SPListItemCollection.get_Item(Int32 iIndex)     at Microsoft.SharePoint.SPListItem.EnsureItemIsValid()`

添加properties.InvalidateListItem()没有做任何事情。 ItemUpdated块中的try {} catch不会捕获异常。

我该怎么办?

2 个答案:

答案 0 :(得分:0)

我猜你错过了

    SPWeb web = properties.Web;
    web.AllowUnsafeUpdates = true;

答案 1 :(得分:0)

我已将代码更改为ItemUpdating。在这种覆盖中,一切都很完美。