2013-07-30 21 views
0

我在「任務」列表上創建了一個事件接收器。無法從Sharepoint事件接收器重定向

如果「到期日期」爲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豬病的頁面可我得到這個輸出。

enter image description here

我應該如何解決這個問題?請幫忙。

回答

1

首先我先檢查了Web瀏覽器的網址是:

/_layouts/CustomErrorPage/DueDateErrorPage.aspx

有人打開這意味着頁面可用,但也有一些是在只有網址丟失的頁面。

所以通過使用SPUrlUtility類,我能夠重定向頁面。

,我需要做的改變是:

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

它的工作完美..

4

我認爲您的重定向網址無效,因爲它將相對於當前頁面,而不是當前網站或網站集。

您可以通過查看對話框的屬性來診斷這一點,並檢查url。

  1. 方法1:解決amgiguity

    要解決歧義,我建議你使用SPUtility.GetServerRelativeUrlFromPrefixedUrl method

    這將創建一個正確的URL。

    特別是,改變你的代碼是這樣的:

    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 dedicated Stack Exchange site存在。

+0

謝謝您的答覆先生,我是初學者到SharPoint和練習。我所做的更改按你的建議,但現在錯誤發生了變化。錯誤顯示「事件接收方已取消請求.. @Steve B –

+0

@RiyazKalva:我認爲解決問題的最佳方法是遵循方法2.如果您的要求是使截止日期爲強制性,那麼讓SharePoint處理此操作,並將該字段直接標記爲列表結構中的強制項。 –

相關問題