无法从sharepoint事件接收器重定向

时间:2013-07-30 12:13:59

标签: redirect sharepoint-2010 custom-error-pages

我在“任务”列表中创建了一个事件接收器。

如果“截止日期”为null,则应将用户重定向到自定义错误页面。

自定义错误页面位于“Layouts”目录下的SharePoint映射文件夹中。

事件接收者代码如下:

public override void ItemAdding(SPItemEventProperties properties)
{
    try
    {
        if (properties.AfterProperties["Due Date"] == null)
        {
            properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;
            properties.RedirectUrl = "_layouts/CustomErrorPage/DueDateErrorPage.aspx";
        }
    }
    catch (Exception ex)
    {

    }
}

具有名称的“应用程序页面”类型的自定义错误页面。 “DueDateErrorPage.aspx”。标记是:

<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">

</asp:Content>

<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
ERROR : You cannot create the task without due date
</asp:Content>

<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
Custom Error Page
</asp:Content>

<asp:Content ID="PageTitleInTitleArea"     ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server" >
Custom Error Page
</asp:Content>

虽然在IIS中,在_layouts direcory下页面可用,但我得到了这个输出。

enter image description here

我该如何处理这个错误?请帮忙。

2 个答案:

答案 0 :(得分:4)

我认为您的重定向网址无效,因为它将相对于当前网页,而不是当前网站或网站集。

您可以通过查看对话框框架属性来诊断它,并检查网址。

  1. 方法1:解决问题

    要解决歧义,建议您使用SPUtility.GetServerRelativeUrlFromPrefixedUrl method

    这将创建一个正确的网址。

    特别是,改变你的代码:

    properties.RedirectUrl = SPUtility.GetServerRelativeUrlFromPrefixedUrl(
        "~site/_layouts/CustomErrorPage/DueDateErrorPage.aspx"
        );
    

    这会动态解析~site到您当前的SPWeb网址。您还可以使用~sitecollection来解析网站集。

  2. 方法2:强制字段

    为什么不简单地要求截止日期?

  3. 方法3:使用标准的sharepoint错误页面(未经测试我承认)

    使用自定义错误消息“取消”事件,而不是重定向到您自己的页面:

        properties.Status = SPEventReceiverStatus.CancelWithError;
        properties.ErrorMessage= "Due date is mandatory";
    

    此外,CancelWithRedirectUrl现已过时。

  4. PS:作为旁注,您应该知道SharePoint dedicated Stack Exchange site存在。

答案 1 :(得分:1)

首先,我首先在网络浏览器中检查了网址:

/_layouts/CustomErrorPage/DueDateErrorPage.aspx

打开页面意味着页面可用,但网址中缺少某些内容。

因此,通过使用SPUrlUtility类,我能够重定向页面。

我需要做出的改变是:

properties.RedirectUrl = SPUrlUtility.CombineUrl(properties.WebUrl,"/_layouts/CustomErrorPage/DueDateErrorPage.aspx");

它完美运作..