我在“任务”列表中创建了一个事件接收器。
如果“截止日期”为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下页面可用,但我得到了这个输出。
我该如何处理这个错误?请帮忙。
答案 0 :(得分:4)
我认为您的重定向网址无效,因为它将相对于当前网页,而不是当前网站或网站集。
您可以通过查看对话框框架属性来诊断它,并检查网址。
方法1:解决问题
要解决歧义,建议您使用SPUtility.GetServerRelativeUrlFromPrefixedUrl method。
这将创建一个正确的网址。
特别是,改变你的代码:
properties.RedirectUrl = SPUtility.GetServerRelativeUrlFromPrefixedUrl(
"~site/_layouts/CustomErrorPage/DueDateErrorPage.aspx"
);
这会动态解析~site
到您当前的SPWeb
网址。您还可以使用~sitecollection
来解析网站集。
方法2:强制字段
为什么不简单地要求截止日期?
方法3:使用标准的sharepoint错误页面(未经测试我承认)
使用自定义错误消息“取消”事件,而不是重定向到您自己的页面:
properties.Status = SPEventReceiverStatus.CancelWithError;
properties.ErrorMessage= "Due date is mandatory";
此外,CancelWithRedirectUrl
现已过时。
PS:作为旁注,您应该知道SharePoint dedicated Stack Exchange site存在。
答案 1 :(得分:1)
首先,我首先在网络浏览器中检查了网址:
/_layouts/CustomErrorPage/DueDateErrorPage.aspx
打开页面意味着页面可用,但网址中缺少某些内容。
因此,通过使用SPUrlUtility类,我能够重定向页面。
我需要做出的改变是:
properties.RedirectUrl = SPUrlUtility.CombineUrl(properties.WebUrl,"/_layouts/CustomErrorPage/DueDateErrorPage.aspx");
它完美运作..