av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

ASP.NETAJAX示例:文檔鎖定程序

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

十年專注成都網(wǎng)站制作,企業(yè)網(wǎng)站設(shè)計(jì),個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站設(shè)計(jì),高端網(wǎng)頁(yè)制作,對(duì)成都橡塑保溫等多個(gè)行業(yè),擁有豐富設(shè)計(jì)經(jīng)驗(yàn)。

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

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

 
 
 
  1. //C#:ASP.NET AJAX示例  
  2. if (!Page.IsPostBack)  
  3. {  
  4. //應(yīng)驗(yàn)證用戶輸入  
  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)前用戶的隊(duì)列中(這會(huì)將文檔添加到會(huì)話中)。接下來,我們將創(chuàng)建用戶控件,該控件可以被放置到任何頁(yè)上,用于當(dāng)隊(duì)列文檔可用時(shí)通知用戶。此用戶控件將包含一個(gè) AJAX 方法以及注冊(cè) 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. '遍歷隊(duì)列文檔并檢查它們是否可用  
  7. < Ajax.AjaxMethod()> _  
  8. Public Function GetUnlockedDocuments() As DocumentCollection  
  9. '獲得屬于用戶的所有隊(duì)列文檔的 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. '如果隊(duì)列文檔不再被鎖定  
  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ā)出請(qǐng)求并處理響應(yīng)。我們將基于響應(yīng)在要?jiǎng)討B(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)來檢查是否存在任何可用的隊(duì)列文檔。一般來說,這意味著我們將在稍后一段時(shí)間內(nèi)一直調(diào)用服務(wù)器端方法,并顯示結(jié)果。在加載頁(yè)面時(shí)僅發(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. //隊(duì)列文檔,2 秒可能會(huì)使服務(wù)器承受  
  5. //過高的負(fù)荷。我們甚至可以首先檢查用戶是否  
  6. //擁有隊(duì)列,但是我們確實(shí)需要進(jìn)行一些  
  7. //性能測(cè)試  
  8. function PollQueue()  
  9. {  
  10. //UnlockNotifier 是我們使用 Ajax.NET 注冊(cè)的類型  
  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)。這與以前示例中的代碼相似。首先,檢查是否存在錯(cuò)誤,獲得響應(yīng),遍歷可用的文檔,動(dò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. }  

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

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

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

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


標(biāo)題名稱:ASP.NETAJAX示例:文檔鎖定程序
地址分享:http://uogjgqi.cn/article/cdhcshj.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流