2013-07-30 4 views
0

Я создал приемник событий в списке «Задача».Не удалось перенаправить из приемника событий sharepoint

Если «Дата погашения» - 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) 
    { 

    } 
} 

Обычай страница ошибки, которая относится к типу «Application Page», имеющий имя. "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

Как я должен решить эту ошибку? Пожалуйста помоги.

ответ

1

Прежде всего, я первый проверил URL в веб-браузере, который:

/_layouts/CustomErrorPage/DueDateErrorPage.aspx

Это было открытие страницы, что означает, что страница доступна, но есть что-то не хватает только URL-адрес.

Таким образом, используя класс SPUrlUtility, я смог перенаправить страницу.

Изменения, которые я должен был сделан:

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

Это прекрасно работает ..

4

Я думаю, что ваш URL-адрес перенаправления недействителен, поскольку он будет относиться к текущей странице, а не к текущему сайту или семейству сайтов.

Вы можете диагностировать это, просмотрев свойства диалогового окна и проверить 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 обработайте это и пометьте поле как обязательное непосредственно в структуре списка. –

Смежные вопросы