2016-03-20 20 views
0

我有一個asp.net頁面來編輯實體。當另一個用戶已經在該實體的編輯頁面上時,通知和防止保存的最佳設計模式是什麼?我希望鎖定在用戶離開頁面時過期。我還想顯示鎖定頁面的用戶名。鎖定頁面/實體,如果其他用戶正在編輯

會話狀態可以是inproc或狀態服務器。

用戶需要知道試圖保存之前(例如禁用保存按鈕編輯頁面上的所有其他用戶)

回答

3

有許多不同的方法可以做到這一點,但在總體上是相當複雜的。要注意的一個挑戰是你不知道用戶什麼時候離開頁面,因爲沒有辦法發信號。我見過用過幾次

一種方法是做到以下幾點:

  • 添加一列,以確定誰鎖定了記錄(例如添加Locked_User_ID等你的表)
  • 添加確定記錄被鎖定的日期/時間的列。 (例如Locked_Timestamp
  • 定義一個全局常量(配置設置等),指定一個鎖有多長時間。
  • 在頁面/控制器負載上,檢查相關記錄是否被鎖定,如果是,是否鎖定了最近的時間(根據您的全局常量)以確定其他用戶仍在使用它。如果是這樣,請不要編輯和顯示正在編輯的用戶及其最近的活動(基於Locked_Timestamp & Locked_User_ID)。
  • 如果最近沒有鎖定,或者根本沒有鎖定,或者被您鎖定,請將Locked_User_ID更新爲當前用戶,並將Locked_Timestamp更新爲當前日期。
  • 一旦用戶點擊回退/取消,保存等,解鎖記錄。 (這樣它就不必等待基於全局常量的超時 - 但是如果它們只是關閉瀏覽器等,則超時將是故障安全)。

這樣做的另一個細微變化是具有實現此功能的「簽出」或「編輯」按鈕/功能,以便用戶可以在不自動獲取鎖的情況下查看信息,只有一次點擊「檢查「或」編輯「是否檢查並獲取鎖定。

希望這會有所幫助!

問候,

羅斯

相關問題