1

_layouts フォルダーに展開されたカスタム SharePoint アプリケーション ページがあります。これは、カスタム コンテンツ タイプのカスタム "新しいフォーム" です。このページを操作している間に、アイテムをリストに追加する必要があります。ページが最初に読み込まれるときに、SPContext.Current.List を使用して、作業中の現在のリストを確認できます。しかし、フォームに入力し、フォームがそれ自体に投稿され、IsPostBack が true になった後、SPContext.Current.List が null になるため、自分のものを追加する必要があるリストが見つかりません。

これは期待されていますか?

ポストバック全体でコンテキスト リストに関する情報を保持するにはどうすればよいですか? asp:hidden コントロールにリストの GUID を入力してから、ポストバックでそれを引き戻すだけですか? それは安全だと思います。

FWIW、これは MOSS 2007 標準バージョンです。

4

4 に答える 4

2

フォーム テンプレートでは実行できないことを _Layouts ファイルで実行できるとしたら、私は驚きます。ほぼ同じテクノロジーを自由に使用できます。

SharePoint が ListItems および Layouts ページ (たとえば、リスト アイテムの "Manage Permissions") を操作する方法を見ると、クエリ文字列を介していくつかの変数が渡されていることがわかります。 ,6,LISTITEM&List={76113B3A-FABA-4389-BC85-4BB2CC5AB423}

おそらく、これらの値をプログラムで使用するたびにコンテキストを取得します。

于 2008-08-27T18:36:09.427 に答える
2

一般的に言えば、私自身の機能を追加しようとするとき、製品グループがとったアプローチを真似ようとします。この場合、リスト定義自体を介して独自の編集/表示/追加ページを追加します。

残念ながらオープンソースではなく、独自のカスタム「新規」フォームも必要とするソリューションを構築しましたが、興味がある場合は、「タグ付きリンク」(SharePoint のソーシャル ブックマーク) と呼ばれるそれをダウンロードできます。ブログ。

いくつかのヒントとヒントを提供するために、以下は正しい方向に向けて出発するはずです:

  1. 新しいリスト定義を作成しました。
  2. 新しいコンテンツ タイプの作成 コンテンツ タイプでは、フォームの「中間」ビットに何が表示されるかを決定するレンダリング テンプレートを参照する独自の「FormTemplates」を定義できます。
  3. 標準のレンダリング テンプレートをコピーしましたが、必要な変更を加えました。
  4. すべてをソリューションにまとめてデプロイしました。

私のレンダリング テンプレートには、上書きされた「保存」ボタンが実際に含まれており、保存中に必要な多くの追加作業を行っていました。

いずれにせよ、私の意見では少しやりすぎですが、製品開発者が採用する標準的なアプローチに最も近いと思います。詳細が必要な場合はお知らせください。段階的なブログ投稿をまとめることができるかどうかを確認しますが、これで正しい方向に進むことができれば幸いです.

于 2008-08-27T17:30:42.720 に答える
0

カスタムフォームを使用しているので、ここでは私の問題は「特別」だと思います。私は、SharePointリストのようなものではない多くのことを行っているという理由だけで、カスタムFormTemplateではなくカスタムフォームを使用することを選択しました(サードパーティのアプリから情報を取得するためにajax呼び出しを行い、それに基づいていくつかの動的フォーム要素を生成します)そのajaxの結果、その後のポストバックでのそのデータの処理)。通常のカスタムレンダリングテンプレートメカニズム内でこれを試すのは悪夢だと思いました。

また、このリストには複数のコンテンツタイプが関連付けられており、各コンテンツタイプには独自のカスタムフォームがあるため、リスト定義自体にカスタムフォーム宣言を指定することはできないと思います(他のタイプはありがたいことにはるかに単純です)。

実際、リストGUIDを非表示フィールドに保持する簡単な方法は、この特定の問題に対処するための非常に影響の少ない方法でした。私の主な懸念は、ここにポストバックしたときにSPContextがすべての有用性を失う理由がわからないことです。これにより、私は何か間違ったことをしていると思います。

于 2008-08-27T17:52:19.160 に答える
0

カスタムの「新しいフォーム」を使用していないため、これは当てはまらない可能性があります。カスタム コンテンツ タイプにイベント レシーバーを追加し、ItemAdded または ItemAdding イベントでカスタム コードを実行しました。このコードは、イベントがリストに追加されたときに発生します。イベント レシーバー プロパティを使用して、親のリスト、Web、およびサイトにアクセスできます。

于 2008-08-27T13:52:34.010 に答える