1

ItemUpdating イベントで一部のデータを検証するためのコンテンツ タイプのイベント レシーバーがあります。イベントをキャンセルする場合 (たとえば、一部のデータが有効でない場合)、プロパティ cancel を true に設定します。

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

SharePoint は更新イベントを正常にキャンセルしますが、標準の SharePoint エラー ページを (指定されたメッセージと共に) 表示します。唯一の問題は、これが実際にはあまり役に立たないという苦情があることです。詳細を更新できるように、EditForm ページに戻る必要があります。

誰もこれをやったことがありますか、簡単な方法はありますか?私が持っていた唯一の提案は、独自のエラー ページを実装できるということですが、それは (理論的に) 単純なプロセスに対する非常に重い解決策のように思えます。

4

2 に答える 2

3

ErrorMessage に HTML コード (javascript も含む) を出力してみてください。しかし、そうしたとしても、問題は、ユーザーが入力したデータに安全に戻る方法がないことです。HTTP/301 リダイレクトを作成してから新しいページをロードするか、クライアントにhistory.back()JavaScript を使用させてからブラウザがページをリロードする可能性があります。

これを行う公式の方法は、リスト定義を作成し、リスト テンプレートをカスタマイズすることです。次に、編集フォーム テンプレートを編集し、必要な数の ASP.Net バリデータ コントロールを含めます。次に、必要に応じてサーバー側のロジックを実装します。この記事では、この手法について説明しています: http://msdn.microsoft.com/en-us/library/aa543922.aspx

編集: 特定のコンテンツ タイプを編集するためのカスタム コントロールをアタッチするには、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>
于 2010-01-12T18:03:08.520 に答える
0

CopyUtil を使用してリダイレクトを試みることができます: http://weblogs.asp.net/jan/archive/2008/02/26/copyutil-aspx-a-little-sharepoint-gem.aspx

link = " http://yoursite/_layouts/CopyUtil.aspx?Use=id&Action=dispform&ItemId=X&ListId=X&WebId=X&SiteId=X ";

Page.Response.Redirect(リンク)

多分これはうまくいくでしょう

于 2010-01-13T15:07:53.377 に答える