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

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

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

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

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

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

  1. //C#:ASP.NET AJAX示例  
  2. if (!Page.IsPostBack)  
  3. {  
  4. //應(yīng)驗證用戶輸入  
  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. }  

關(guān)鍵行的位置是將文檔添加到當(dāng)前用戶的隊列中(這會將文檔添加到會話中)。接下來,我們將創(chuàng)建用戶控件,該控件可以被放置到任何頁上,用于當(dāng)隊列文檔可用時通知用戶。此用戶控件將包含一個 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現(xiàn)在需要的是使一些 JavaScript 發(fā)出請求并處理響應(yīng)。我們將基于響應(yīng)在要動態(tài)創(chuàng)建的表中放置已發(fā)布的文檔信息(如果有)。為此,我們將開始編寫 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 標(biāo)記隱藏所有內(nèi)容,用 TABLE 標(biāo)記來顯示結(jié)果。我們將使用輪詢系統(tǒng)來檢查是否存在任何可用的隊列文檔。一般來說,這意味著我們將在稍后一段時間內(nèi)一直調(diào)用服務(wù)器端方法,并顯示結(jié)果。在加載頁面時僅發(fā)生第一次調(diào)用,每隔 X 秒發(fā)生后續(xù)調(diào)用。

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

剩下的就是處理響應(yīng)。這與以前示例中的代碼相似。首先,檢查是否存在錯誤,獲得響應(yīng),遍歷可用的文檔,動態(tài)創(chuàng)建 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. //如果服務(wù)器端代碼出現(xiàn)異常  
  11. if (response.error != null)  
  12.   {   
  13. notifyBox.style.display = "none";   
  14. alert(response.error); //我們應(yīng)該能做得更好  
  15. return;  
  16.   }    
  17. var documents = response.value;  
  18. //如果不是我們所希望的響應(yīng)  
  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. }  

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

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

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

以上就是ASP.NET AJAX示例:文檔鎖定程序的實(shí)現(xiàn)。

【編輯推薦】

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

2009-08-07 16:09:25

ASP.NET AJA

2009-08-07 16:39:08

ASP.NET AJA

2009-07-22 16:05:34

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-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-22 15:58:52

ASP.NET AJA

2009-07-31 13:24:43

ASP.NET AJA

2009-07-20 17:39:36

WCF服務(wù)ASP.NET AJA

2009-07-20 13:54:31

ScriptManagASP.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-31 10:34:41

ASP.NET抓取網(wǎng)頁

2009-07-24 13:08:40

AJAX技術(shù)ASP.NET

2009-07-24 17:43:35

循環(huán)引用ASP.NET AJA
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产综合精品一区二区三区 | 97国产一区二区精品久久呦 | 农夫在线精品视频免费观看 | 欧美激情久久久 | 岛国午夜 | 国产精品永久免费观看 | 特一级毛片 | 在线国产中文字幕 | 一区二区视频 | 成人精品视频99在线观看免费 | 婷婷国产一区二区三区 | 亚洲视频免费 | 成人免费视频网站在线观看 | 欧美日韩在线观看一区 | 久久久久久成人 | 国产精品国产自产拍高清 | 青草视频在线 | 国产精品毛片一区二区在线看 | 国产一区二区 | 亚洲视频一区在线观看 | 亚洲欧美日韩在线 | 狠狠干在线 | 黄色毛片网站在线观看 | 亚洲国产成人精品女人久久久 | 亚洲一区综合 | 久久精品小视频 | av在线播放免费 | 久久精品成人 | 成年人免费看 | 国产精品成人在线观看 | 中文在线a在线 | 国产a级黄色录像 | 久久久久国产一区二区三区四区 | 亚洲欧美久久 | 91av免费看 | 麻豆一区二区三区精品视频 | 99精品99 | 亚洲午夜精品一区二区三区他趣 | 操久久 | www.久久.com| 久草www |