成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET AJAX示例:文檔鎖定程序

開發 后端
本文介紹了一個ASP.NET AJAX示例:文檔鎖定程序。此示例屬于簡單的文檔管理系統。如任何正式的文檔管理系統一樣,我們必須提供并發管理。

ASP.NET AJAX示例:文檔鎖定程序

此示例屬于簡單的文檔管理系統。如任何正式的文檔管理系統一樣,我們必須提供并發管理。即,我們需要一種方法來處理兩個用戶嘗試編輯同一個文檔的問題。我們將通過創建某種類型的鎖定機制,來使正在編輯的文檔不能再由另一個用戶編輯,從而達到上述目的。我們將利用 AJAX 讓用戶有更愉快的鎖定機制體驗。首先,我們將創建用戶嘗試編輯但無法編輯(因為其他用戶正在編輯該文檔)的文檔隊列,當這些文檔可用時自動通知用戶。其次,我們將確保當用戶關閉其瀏覽器或導航到其他位置時,解除對文檔的鎖定。后一個功能幫助確保文檔不會永遠處于鎖定狀態。為此,在本指南中,我們將跳過與 AJAX 實現不相關的功能;但是,可下載項目包含所有功能。

首先,當用戶嘗試編輯文檔時,我們會嘗試對其建立排它鎖,如果失敗,我們會將此文檔添加到用戶的隊列然后使其返回到主頁。對此處的 AJAX 沒有什么特別之處,但是我們將查看一下代碼,以便給出示例必要的上下文。在用于編輯的 Page 的 OnLoad 事件中,添加以下代碼。

  1. //C#:ASP.NET AJAX示例  
  2. if (!Page.IsPostBack)  
  3. {  
  4. //應驗證用戶輸入  
  5. Document document = GetDocument(Request.QueryString["id"]);  
  6. //我們擁有此文檔,但不能編輯它!  
  7. if (!Locker.AcquireLock(document))  
  8.  {  
  9. //讓我們將它添加到要查看的用戶文檔列表  
  10. User.CurrentUser.AddDocumentToQueue(document.DocumentId);  
  11. Response.Redirect("DocumentList.aspx");  
  12.  }  
  13. //好了,我們擁有此文檔,并且可以編輯它  
  14.  //...  
  15. }  

關鍵行的位置是將文檔添加到當前用戶的隊列中(這會將文檔添加到會話中)。接下來,我們將創建用戶控件,該控件可以被放置到任何頁上,用于當隊列文檔可用時通知用戶。此用戶控件將包含一個 AJAX 方法以及注冊 AJAX 的類所需的代碼。

  1. 'VB.NET:ASP.NET AJAX示例  
  2. Private Sub Page_Load(s As Object, e As EventArgs)   
  3. Handles MyBase.Load  
  4. Ajax.Utility.RegisterTypeForAjax(GetType(UnlockNotifier))  
  5. End Sub 
  6. '遍歷隊列文檔并檢查它們是否可用  
  7. < Ajax.AjaxMethod()> _  
  8. Public Function GetUnlockedDocuments() As DocumentCollection  
  9. '獲得屬于用戶的所有隊列文檔的 ID  
  10. Dim queuedDocument As ArrayList = User.CurrentUser.DocumentQueue  
  11. Dim unlocked As DocumentCollection = New DocumentCollection  
  12. For Each documentId As Integer In queuedDocumentIds  
  13. '如果隊列文檔不再被鎖定  
  14. If Not Locker.IsLocked(documentId) Then 
  15. unlocked.Add(Document.GetDocumentById(documentId))  
  16. End If 
  17. Next 
  18. Return unlockedDocuments  

End Function現在需要的是使一些 JavaScript 發出請求并處理響應。我們將基于響應在要動態創建的表中放置已發布的文檔信息(如果有)。為此,我們將開始編寫 HTML。

  1. < div id="notifyBox" style="display:none;"> 
  2. < b>The following queued documents can now be edited< /b> 
  3. < table cellpadding="5" cellspacing="0" 
  4. border="0" style="border:1px solid #EEE;" 
  5. id="notifyTable"> 
  6. < /table> 
  7. < /div> 

如果沒有可用的文檔(或是沒有為該用戶列出文檔),我們使用 DIV 標記隱藏所有內容,用 TABLE 標記來顯示結果。我們將使用輪詢系統來檢查是否存在任何可用的隊列文檔。一般來說,這意味著我們將在稍后一段時間內一直調用服務器端方法,并顯示結果。在加載頁面時僅發生第一次調用,每隔 X 秒發生后續調用。

  1. < script language="javascript">  
  2. window.setTimeout("PollQueue();", 2000);  
  3. //每隔 2 秒激發以檢查在具有許多用戶的實際系統中是否發布了  
  4. //隊列文檔,2 秒可能會使服務器承受  
  5. //過高的負荷。我們甚至可以首先檢查用戶是否  
  6. //擁有隊列,但是我們確實需要進行一些  
  7. //性能測試  
  8. function PollQueue()  
  9. {  
  10. //UnlockNotifier 是我們使用 Ajax.NET 注冊的類型  
  11. //GetUnlockedDocuments 是該類型中的方法,標有  
  12. //AjaxMethod 屬性  
  13. UnlockNotifier.GetUnlockedDocuments(PollQueue_CallBack);  
  14. //每隔 2 秒調用其本身  
  15. window.setTimeout("PollQueue();", 2000);  
  16. }  
  17. < /script>  

剩下的就是處理響應。這與以前示例中的代碼相似。首先,檢查是否存在錯誤,獲得響應,遍歷可用的文檔,動態創建 HTML,在這種情況下,向表中添加行和列。

  1. function PollQueue_CallBack(response)  
  2. {  
  3. var notifyBox = document.getElementById("notifyBox");  
  4. var notifyTable = document.getElementById("notifyTable");  
  5. //如果我們無法找到表通知框  
  6. if (notifyBox == null || notifyTable == null)  
  7.   {  
  8. return;  
  9.   }  
  10. //如果服務器端代碼出現異常  
  11. if (response.error != null)  
  12.   {   
  13. notifyBox.style.display = "none";   
  14. alert(response.error); //我們應該能做得更好  
  15. return;  
  16.   }    
  17. var documents = response.value;  
  18. //如果不是我們所希望的響應  
  19. if (documents == null || typeof(documents) != "object")  
  20.   {  
  21. notifyBox.style.display = "none";  
  22. return;  
  23.   }    
  24. for (var i = 0; i <  notifyTable.rows.length; ++i)  
  25.   {  
  26. notifyTable.deleteRow(i);  
  27.   }  
  28. for(var i = 0; i <  documents.length; ++i)  
  29.   {      
  30. var row = notifyTable.insertRow(0);  
  31. row.className = "Row" + i%2;  
  32. var cell = row.insertCell(0);  
  33. cell.innerHTML = documents[i].Title;  
  34. cell = row.insertCell(1);  
  35. var date = documents[i].Created;  
  36. cell.innerHTML = date.getDay() + "/" + date.getMonth()   
  37. "/" + date.getYear();  
  38. cell = row.insertCell(2);  
  39. cell.innerHTML = "< a href='DocumentEdit.aspx?id="   
  40. + documents[i].DocumentId + "'>edit< /a>";  
  41.   }   
  42. notifyBox.style.display = "block";  
  43. }  

我們要看到的最后一個快速改進是當用戶關閉瀏覽器、導航到其他鏈接或單擊“后退”按鈕時,將自動解除文檔鎖定。通常,可以通過觸發 JavaScript OnBeforeUnLoad 事件或 OnUnload 事件達到此目的,這會打開新的小型彈出式窗口,該彈出式窗口在加載頁面時做一些清理然后自行關閉。您自己可以使用彈出式窗口,但是其他人則不能使用,它將導致彈出式窗口受阻并使文檔永久保持鎖定狀態。要解決此問題,我們仍需要兩個 JavaScript 事件,但是并不是啟動彈出式窗口,而是將通過 AJAX 執行服務器端方法。在用于編輯文檔的頁上(即,放置鎖的頁),我們添加一些簡單的 JavaScript。

  1. < script language="javascript"> 
  2. //如果用戶關閉瀏覽器或點擊“后退”按鈕,  
  3. //確保該文檔會被解除鎖定  
  4. window.onbeforeunload = ReleaseLock;  
  5. function ReleaseLock() {  
  6. Locker.ReleaseDocument(< %=DocumentID%>);  
  7. }  
  8. < /script> 

在這里,DocumentId 是在后面的代碼中定義和設置的變量。另外,我們可以在會話中存儲 DocumentId,并在服務器端 ReleaseDocument 中訪問。通常,ReleaseDocument 從鎖定的文檔列表中刪除文檔。

以上就是ASP.NET AJAX示例:文檔鎖定程序的實現。

【編輯推薦】

  1. ASP.NET AJAX示例:下拉列表
  2. AJAX.NET安裝配置全指南
  3. Ajax.Net快速入門
  4. ASP.NET AJAX軟件下載
  5. ASP.NET之父強烈推薦:ASP.NET AJAX著作
責任編輯:yangsai 來源: MSDN
相關推薦

2009-08-07 16:09:25

ASP.NET AJA

2009-08-07 16:39:08

ASP.NET AJA

2009-07-22 16:11:43

ASP.NET AJA

2009-07-22 16:17:39

ASP.NET AJA

2009-07-22 16:25:41

ASP.NET AJA

2009-07-24 13:41:15

ASP.NET AJA

2009-07-22 16:05:34

ASP.NET AJA

2009-07-22 15:58:52

ASP.NET AJA

2009-07-31 13:24:43

ASP.NET AJA

2009-07-29 13:50:26

UpdatePanelASP.NET

2009-07-20 10:16:13

配置ASP.NET A

2009-07-28 09:02:32

asp.net aja

2009-07-21 17:18:26

UpdateProgrASP.NET AJA

2009-07-29 15:53:22

ASP.NET AJA

2009-07-20 13:14:25

安裝ASP.NET A

2009-07-20 17:39:36

WCF服務ASP.NET AJA

2009-07-20 13:54:31

ScriptManagASP.NET AJA

2009-07-31 10:34:41

ASP.NET抓取網頁

2009-07-20 17:59:07

JavaScript調ASP.NET AJA

2009-07-21 09:53:55

ASP.NET AJAWCF服務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品久久久久 | 日日夜夜精品视频 | 在线播放中文字幕 | 欧美一区二区三区在线观看 | 亚洲精品免费观看 | 国产美女一区二区 | 欧美激情啪啪 | 男人的天堂亚洲 | 青青久草 | 蜜臀久久 | 天天天操操操 | 精品一区二区三区四区外站 | 一区二区三区四区不卡 | 狠狠色综合久久丁香婷婷 | 欧美黑人一区 | 国产精品久久久久久吹潮 | 欧美一区二区三区在线看 | 久久久不卡网国产精品一区 | 风间由美一区二区三区在线观看 | 天天弄天天操 | 美国黄色一级片 | 国产精品久久 | 超碰97人人人人人蜜桃 | 日韩免费高清视频 | 中文字幕一区二区三区精彩视频 | 一区二区三区免费看 | 亚洲91| 欧美视频一区二区三区 | 国产在线观看一区 | 国产成人精品一区二区三 | 在线不卡视频 | 亚洲永久入口 | 久久99精品久久 | 欧产日产国产精品v | 91在线一区| 欧美一区中文字幕 | 日日夜夜精品免费视频 | 久久久久久久久久久高潮一区二区 | 日韩在线一区二区三区 | 日韩福利 | 亚洲综合一区二区三区 |