簡體   English   中英

ASP.NET中的頁面鎖定

[英]Page locking in ASP.NET

這是我的ASP.NET頁面設置的概述。 框架是4.0。

在頁面的每個選項卡中都有一個帶有選項卡的頁面。 頁面上有一個鎖定按鈕,用於鎖定和解鎖頁面。 該頁面將在任何用戶打開時自動鎖定。 這是當前設置。 但是現在我們需要以下場景:

用戶打開頁面時不應將其鎖定。 但是,當他嘗試編輯或更改頁面字段中的任何信息時,它應該鎖定頁面。 我想這更多是客戶端問題。 因此,當另一個用戶嘗試打開頁面並對其進行編輯時,該頁面也將被鎖定,因為它是一個單獨的客戶端。 因此,ASP.NET中應該有一種機制可以在用戶嘗試編輯頁面上的信息時通知服務器頁面已被鎖定,因此當其他用戶嘗試修改頁面時,他們會收到“鎖定”錯誤。

因此,我的問題是如何實現上述目標以及需要考慮哪些方面?

我知道在ASP.NET中,我們可以為用戶事件(如單擊按鈕等)編寫代碼。但是不確定實現上述目標的技術。 任何輸入都會有很大的幫助。

您可以將某些內容存儲在應用程序緩存中,並將有效期設置為您希望頁面“鎖定”的時間長短。 每次有回發時,您都將在高速緩存中檢查此值,然后“鎖定”頁面或向用戶返回錯誤。 每次在不回發的情況下加載頁面時,都將禁用按鈕和/或輸入控件。

Page_Load類似內容應該是一個合理的起點:

string usernameWhoHasLock = (string)Cache["PageIsLockedByUser"];
if (usernameWhoHasLock  == null)
{
  // Page is not locked, lock it:
  usernameWhoHasLock = HttpContext.Current.Identity.Name;
  Cache.Insert("PageIsLockedByUser", isLocked, null, EXPIRYDETAILS);
}
else
{
   // Page is locked. If IsPostback, allow edits if is the user with the lock, otherwise return an error. If not postback, disable the edit button unless is the user with the lock.
}

有關提供給Cache.Insert的參數, Cache.Insert確定您需要什么到期策略,並參考此處的文檔。 IsPostback記錄在這里

您可以考慮在數據庫中實現悲觀鎖定,其中記錄將被明確鎖定並保持鎖定,除非記錄被釋放(在這種情況下已保存/取消)。 實施起來不是很容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM