SharePoint 항목 업데이트 이벤트 - EditForm 페이지로 이벤트를 취소 하시겠습니까?

StackOverflow https://stackoverflow.com/questions/2050466

  •  20-09-2019
  •  | 
  •  

문제

Itemupdating 이벤트에서 일부 데이터를 검증하기 위해 컨텐츠 유형의 이벤트 수신기가 있습니다. 이벤트를 취소하면 (일부 데이터가 예를 들어 유효하지 않음) 속성 취소를 true로 설정합니다.

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

SharePoint는 업데이트 이벤트를 취소하지만 표준 SharePoint 오류 페이지 (지정된 메시지 포함)를 보여줍니다. 문제는 실제로 유용하지 않다는 불만이 있다는 것입니다. 세부 사항을 업데이트 할 수 있도록 editform 페이지로 돌아 가야합니다.

이 작업을 수행 한 사람이 있습니까? 쉬운 방법이 있습니까? 내가 가진 유일한 제안은 내 자신의 오류 페이지를 구현할 수 있다는 것입니다. 그러나 (이론적으로) 간단한 프로세스에 대한 매우 무거운 솔루션으로 들립니다.

도움이 되었습니까?

해결책

errormessage에서 HTML 코드 (JavaScript 포함)를 출력하려고 시도 할 수 있습니다. 그러나 그렇게하더라도 문제는 사용자가 입력 한 데이터로 돌아가는 안전한 방법이 없다는 것입니다. HTTP/301 리디렉션을 만들고 새 페이지로드를하거나 클라이언트가 history.back() JavaScript를 사용하면 브라우저가 페이지를 다시로드 할 수 있습니다.

이 작업을 수행하는 공식적인 방법은 목록 정의를 작성하고 목록 템플릿을 사용자 정의하는 것입니다. 그런 다음 편집 양식 템플릿을 편집하고 필요에 따라 많은 ASP.NET Validator 컨트롤을 포함시킵니다. 그런 다음 필요한대로 서버 측로 로직을 구현하십시오. 이 기사는 다음을 설명합니다. http://msdn.microsoft.com/en-us/library/aa543922.aspx

편집 : 특정 ContentType의 편집을위한 사용자 정의 컨트롤을 첨부하려면 ContentType 정의에 XMLDocuments 섹션을 추가합니다. 예를 들어, 이렇게

<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>

다른 팁

Copilutil을 사용하여 리디렉션하려고 시도 할 수 있습니다. 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 (링크)

어쩌면 이것은 효과가있을 것입니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top