2008-08-26 31 views
1

我有一個自定義的SharePoint應用程序頁面部署到_layouts文件夾。這是自定義內容類型的自定義「新形式」。在我與此頁面交互期間,我需要將一個項目添加到我的列表中。當頁面第一次加載時,我可以使用SPContext.Current.List來查看我正在使用的當前列表。但是,當我填寫表單並將表單發回到自身並且IsPostBack爲true時,則SPContext.Current.List爲空,因此我找不到需要添加我的東西的列表。自定義應用程序頁面中的SharePoint SPContext.List

這是預期嗎?

我應該如何在回傳中保留關於我的上下文列表的一些信息?我應該只使用列表的guid填充一些asp:hidden控件,然後從回發中將它拉回來?我想這似乎很安全。

FWIW,這是MOSS 2007標準版。

回答

2

一般來說,我嘗試複製產品組在嘗試添加自己的功能時採取的任何方法。在這種情況下,他們通過列表定義本身添加他們自己的編輯/查看/添加頁面。

我構建的解決方案也需要自己定製的「新」形式,不幸的是不是開源的,儘管如果你感興趣,你可以下載它,它被稱爲「標籤鏈接」(社會書籤爲SharePoint),你可以找到我的博客上的一些鏈接。

給你一些提示和技巧,下面應該設置你關在正確的方向:

  1. 創建一個新的列表定義。
  2. 創建一個新的內容類型在內容類型中,您可以定義自己的「FormTemplates」,它引用一個Rendering Template來確定顯示在這些表單的「Middle」位的內容。
  3. 複製標準渲染模板,但隨後對其進行了更改,我需要 。
  4. 將它們全部包裝在解決方案中並進行部署。

我的渲​​染模板實際上包含了一個覆蓋的「保存」按鈕,我在保存過程中做了很多額外的工作。

無論如何,在我看來,這是一個有點太多的工作,但我認爲它最符合產品開發人員採用的標準方法。讓我知道你是否需要更多的細節,我會看看我是否可以一步一步地撰寫博客文章,但希望這可以讓你走向正確的方向。

0

我沒有使用自定義「新窗體」,所以這可能不適用。我爲我的自定義內容類型添加了一個事件接收器,然後在ItemAdded或ItemAdding事件中執行我的自定義代碼。當事件添加到列表時,此代碼會觸發。您可以使用事件接收器屬性來訪問父列表,Web和站點。

0

我想我的問題是「特殊」,因爲我使用自定義窗體。我選擇使用自定義表單而不是自定義FormTemplate,因爲我正在做很多不像SharePoint列表那樣的東西(使ajax調用來從第三方應用程序獲取信息,然後生成一些動態表單元素,這些動態表單元素基於那個ajax結果,然後後處理那個數據)。我認爲在通常的自定義渲染模板機制中嘗試這將是一場噩夢。

我也不認爲我可以在列表定義本身提供自定義表單聲明,因爲我有多個與此列表關聯的內容類型,並且每個內容類型都有自己的自定義表單(其他類型非常感謝簡單)。

其實,我在隱藏域中保持列表guid的簡單方法是解決這個特定問題的一個影響非常小的方法。我主要擔心的是,我不確定爲什麼SPContext在我回發時失去了所有功能,這讓我覺得我做錯了什麼。

3

如果您可以在_Layouts文件中執行某些您無法在表單模板中執行的操作,我會感到驚訝。您可以使用幾乎相同的技術。

查看SharePoint與ListItems和Layouts頁面的工作方式(例如對列表項目的「Manage Permissions」),我可以看到他們通過querystrings傳遞了一些變量: ?obj = {76113B3A-FABA-4389 -BC85-4BB2CC5AB423},6,LISTITEM & List = {76113B3A-FABA-4389-BC85-4BB2CC5AB423}

也許他們每次使用這些值以編程方式獲取上下文。

相關問題