Событие обновления элемента Sharepoint - отменить событие обратно на страницу редактирования формы? - PullRequest
1 голос
/ 12 января 2010

У меня есть получатель события для типа контента, чтобы проверить некоторые данные в событии ItemUpdating. Если я отменяю событие (например, некоторые данные недействительны), я устанавливаю для свойства cancel значение true:

properties.Cancel = true;
properties.ErrorMessage = "...";

SharePoint отменяет событие обновления, но отображает стандартную страницу ошибок SharePoint (с указанным сообщением). Единственная проблема в том, что я получил жалобу, что это на самом деле не очень полезно - мы должны вернуться на страницу EditForm, чтобы детали могли быть обновлены.

Кто-нибудь делал это, есть ли простой способ? Единственное предложение, которое у меня было, - это то, что я могу реализовать свою собственную страницу с ошибкой, но это звучит довольно тяжело для (теоретически) простого процесса.

Ответы [ 2 ]

3 голосов
/ 12 января 2010

Вы можете попытаться вывести HTML-код (который также включает в себя javascript) в ErrorMessage. НО даже если вы это сделаете, проблема в том, что у вас нет безопасного пути назад к данным, введенным пользователем. Либо вы делаете перенаправление HTTP / 301, а затем загружается новая страница, либо вы заставляете клиента работать на history.back() с JavaScript, и затем браузер может перезагрузить страницу.

Официальный способ сделать это состоит в том, что вы создаете определение списка и настраиваете шаблон списка. Затем вы редактируете шаблон формы редактирования и добавляете столько элементов управления ASP.Net, сколько необходимо. Затем реализуйте логику на стороне сервера по мере необходимости. Эта статья объясняет технику: http://msdn.microsoft.com/en-us/library/aa543922.aspx

РЕДАКТИРОВАТЬ: Чтобы прикрепить пользовательский элемент управления для редактирования определенного типа содержимого, вы добавляете раздел XmlDocuments в определение ContentType. Например, вот так

<ContentType
    ..........

    <XmlDocuments>
      <XmlDocument NamespaceURI="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
        <FormTemplates xmlns="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">
          <Display>ContentTypeName_DispForm</Display>
          <Edit>ContentTypeName_EditForm</Edit>
          <New>ContentTypeName_NewForm</New>
        </FormTemplates>
      </XmlDocument>
    </XmlDocuments>
  .......

Затем вы создаете свой собственный файл yoursolution_controltemplates.ascx, который также содержит такие блоки: "

<SharePoint:RenderingTemplate ID="ContentTypeName_DispForm" runat="server"> 
<Template>
      <!-- put whatever controls you need here, we typically create a 
           separate custom control which implements everything-->
</Template>
</SharePoint:RenderingTemplate>
0 голосов
/ 13 января 2010

Вы можете попытаться перенаправить, используя CopyUtil: http://weblogs.asp.net/jan/archive/2008/02/26/copyutil-aspx-a-little-sharepoint-gem.aspx

ссылка = "http://yoursite/_layouts/CopyUtil.aspx?Use=id&Action=dispform&ItemId=X&ListId=X&WebId=X&SiteId=X";

Page.Response.Redirect (ссылка)

возможно это будет работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...