2017-05-03 77 views
7

我正在查看一些破壞了SP2010中List項目更改保存的代碼。在Event Receiver的構造函數中,HttpContext被存儲爲局部變量,然後在ItemUpdating最後包含返回URL的查詢參數被檢索並傳遞給SPUtility.Redirect(...)。這具有取消編輯表單中所做更改的效果。因此,我在網上找到了這樣的場景,我將HttpContext存儲爲一個靜態類對象,並將其重定向到事件中,現在編輯已保留,然後重定向到我們期望的位置。在Sharepoint 2010事件接收器中重定向

雖然將一個特定用戶的HttpContext作爲靜態存儲在某個類中,但如果另一個用戶在用戶初始設置上下文和重定向之前執行相同操作時可能會被劫持,我有一個擔憂。用戶2將覆蓋上下文並且存在潛在的問題。

我認爲作爲一個快速出路的唯一的其他選擇是存儲一個靜態字典,其中的關鍵是用戶ID,然後在重定向之前刪除該條目,以便不會讓離開的HttpContext實例泄漏。

因此,看看從here接受的解決方案,servy42的第一個響應狀態The fact that it works for a few trivial test cases at first doesn't make it a viable solution.但沒有提出一個可行的解決方案。

還有另一種選擇best approach may be changing Save Button in ribbon such that when clicked, a ECMA script first save your Item, then redirect to other page, or open other page in dialog.建議進一步下去,但是唯一的另一種方式呢?

我對SP相當陌生,只是試圖用我有限的知識去處理大量錯誤的做法,而不幸的是被SP2010卡住了。

有關如何去做這件事的任何想法?

============

編輯:根據要求

因此,有兩個網站一個說稱爲A,這將有一個子網站進一步信息叫做B. A有列表並向該列表添加項目會觸發創建子站點B和其他相關內容的事件接收器。如果我從Bs的SharePoint列表中修改B「item」,那麼我不需要重定向並返回到列表中就沒有問題。如果我正在尋找並在A列出Bs上整齊呈​​現的甘特圖,如果在單擊「保存」後編輯B,我們需要返回到A.如果我在B上也有編輯按鈕,那麼我想返回到B編輯並單擊保存後。

所以當我們進入編輯屏幕時,我們有了source = additional。從我做的一些閱讀看來,SharePoint似乎會挑選並重定向。編輯頁面上的其中一個字段是A站點下方的相對URL,如果發生更改,則重定向URL將不再有效並拋出404,因此我們用新輸入的值替換舊的B子路徑。但是,我們需要將代碼重定向到新的位置。

+0

該事件接收器的目的是什麼?是否驗證列表項數據? – Vaibhav

+0

我會再次@ Vaibhav的問題,並添加重定向的目的是什麼?根據上下文,您可能會更好地使用客戶端JavaScript而不是服務器端C#來處理重定向。 – Thriggle

+0

我已經添加了一些更多的細節。感謝您的回覆 –

回答

2

我不太確定我是否正確理解您的要求。但我會試一試。只是對我所瞭解的內容進行了快速總結(如果我錯了,請糾正我......):

  • 你有一個網站集根網站與下面的根網站列表
  • 在該列表中的每個條目對應於將在列表項創建(ER創建一個子網站)作爲一個子網站
  • 列表項可以從兩個根網頁列表,以及從它映射子網站
  • 在從要節省

我的方法後返回子網站的子網站編輯進行編輯會是這樣的:

  1. 按照本文SP Dialog and List Forms
  2. 公開賽上鍊接到根網站的編輯表單的一個子網站對話框中描述的步驟。
  3. 節省了用戶後發現自己已經在那裏,他應該是

希望這有助於...乾杯!

編輯:只需閱讀有關更改網址的要求。創建一個自定義編輯表單,您可以使用某些將值傳遞迴原始網站的js進行增強 - >Parameters in dialogs。然後,您可能會在JavaScript回調中做出相應反應並重定向到新的url。

+0

當我沒有時間去嘗試它,並確認方法,因爲賞金即將到來的時間。根據你所描述的,我想我可以看到你的意思,所以我會提前接受這個答案。感謝堆的建議。 –

+0

如果模態是否只能傳回數值?我們現有的系統不是模式,所以想知道如果我必須修改所有的東西以按照您的建議進行工作? –

相關問題