0

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

如果“截止日期”是,null那么用户应该被重定向到自定义错误页面。

自定义错误页面位于“布局”目录下的 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 目录下该页面可用,但我得到了这个输出。

在此处输入图像描述

我应该如何解决这个错误?请帮忙。

4

2 回答 2

4

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

您可以通过查看对话框框架属性来诊断此问题,并检查 url。

  1. 方法一:解决歧义

    为了解决歧义,我建议您使用SPUtility.GetServerRelativeUrlFromPrefixedUrl 方法

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

    特别是,像这样更改您的代码:

    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现在已经过时了。

PS:作为旁注,您应该知道存在一个SharePoint 专用 Stack Exchange 站点

于 2013-07-30T12:21:50.203 回答
1

首先,我首先检查了网络浏览器中的 url,即:

/_layouts/CustomErrorPage/DueDateErrorPage.aspx

它正在打开页面,这意味着该页面可用,但仅在 url 中缺少某些内容。

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

我需要做的改变是:

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

它工作完美..

于 2013-07-31T03:54:01.570 回答