none
SharePoint 2010 事件接收器取消事件,页面跳转问题。 RRS feed

  • 问题

  • 新建一个针对自定义列表的事件接收器,代码如下:

    public class ListEventReceiver : SPItemEventReceiver
        {
            #region 文档库标题
            private const string OUT_OF_BOX_ERROR_PAGE = "/_layouts/error.aspx?ErrorText=";//SharePoint自带的错误页面
            private const string ERROR_MESSAGE = "该文件夹已经被设置为共享文件夹。如需删除,请先解除其共享文件夹特性。";
            #endregion
           /// <summary>
           /// 正在删除项.
           /// </summary>
           public override void ItemDeleting(SPItemEventProperties properties)
           {
               base.ItemDeleting(properties);
               properties.Cancel = true;
               properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;
               properties.RedirectUrl = OUT_OF_BOX_ERROR_PAGE + SPEncode.UrlEncode(ERROR_MESSAGE);
           }

    }

    因为实际环境中的代码比上面的要复杂,为了说明问题,我简化了代码。正常情况下会弹出一个窗口,提示我指定的错误信息。可实际浏览器
    转向下面url:http://dev/_vti_bin/owssvr.dll?CS=65001&Cmd=Delete&List={F8191575-A7C9-4ACC-B50C-CC8F3C3EBF77}&ID=20&NextUsing=http%3A%2F%2Fdev%2FLists%2FList%2FAllItems%2Easpx&InitialTabId=Ribbon%2EListItem&VisibilityContext=WSSTabPersistence

    提示:

    错误
    某个事件接收器取消了此请求。
    Microsoft SharePoint Foundation 疑难解 答。

    请注意转向url里的http://dev/_vti_bin/owssvr.dll。不知道怎么会是这个样子。

    我的环境是:Windows server 2008 r2+SharePoint 2010


    专注moss

    2012年3月19日 6:34

全部回复

  • hi 四毛,

    在你的代码中好像缺少一个状态的取消。类似的代码应该这样。

        base.ItemAdding(properties);
        properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;
        properties.RedirectUrl = "/_layouts/abc.aspx";

    先取消SharePoint的跳转URL,然后再重新定向到某个页面。

    Thanks,

    Jack

    2012年3月20日 1:49
    版主
  • 我也遇到这类问题,关键是跳转不成功,没有跳到指定的页面。
    2012年3月20日 14:18
  • hi Jack Gao,

    我不知道 你注意过没有,同样是我提问时的代码,保持不变,部署后,分别从三个地方删除项 结果却不一样 。

    1.选中项,然后选中Ribbon中的删除 项目 ,此时像直接用浏览器打开/_layouts/error.aspx?ErrorText=xxx这样的效果似的。

    2.从ECB里选中查看项,在打开的窗口里 选中删除项目,此时会弹出窗口,提示我的ERROR_MESSAGE 中的信息 。这个也是我想要的效果。

    3.直接 从ECB里 选中删除项目,就出现我提问时的错误了 。既没有显示或跳转到我的错误页面,也没有显示我的错误信息。就是提示某个事件接收器取消了此请求。 
    如果方便的话,请根据我的描述自己建个测试项目试试,非常感谢。



    专注moss

    2012年3月21日 1:10