日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
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ā)管理。即,我們需要一種方法來(lái)處理兩個(gè)用戶嘗試編輯同一個(gè)文檔的問(wèn)題。我們將通過(guò)創(chuàng)建某種類型的鎖定機(jī)制,來(lái)使正在編輯的文檔不能再由另一個(gè)用戶編輯,從而達(dá)到上述目的。我們將利用 AJAX 讓用戶有更愉快的鎖定機(jī)制體驗(yàn)。首先,我們將創(chuàng)建用戶嘗試編輯但無(wú)法編輯(因?yàn)槠渌脩粽诰庉嬙撐臋n)的文檔隊(duì)列,當(dāng)這些文檔可用時(shí)自動(dòng)通知用戶。其次,我們將確保當(dāng)用戶關(guān)閉其瀏覽器或?qū)Ш降狡渌恢脮r(shí),解除對(duì)文檔的鎖定。后一個(gè)功能幫助確保文檔不會(huì)永遠(yuǎn)處于鎖定狀態(tài)。為此,在本指南中,我們將跳過(guò)與 AJAX 實(shí)現(xiàn)不相關(guān)的功能;但是,可下載項(xiàng)目包含所有功能。

首先,當(dāng)用戶嘗試編輯文檔時(shí),我們會(huì)嘗試對(duì)其建立排它鎖,如果失敗,我們會(huì)將此文檔添加到用戶的隊(duì)列然后使其返回到主頁(yè)。對(duì)此處的 AJAX 沒(méi)有什么特別之處,但是我們將查看一下代碼,以便給出示例必要的上下文。在用于編輯的 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ì)話中)。接下來(lái),我們將創(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ā)布的文檔信息(如果有)。為此,我們將開(kāi)始編寫(xiě) 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> 

如果沒(méi)有可用的文檔(或是沒(méi)有為該用戶列出文檔),我們使用 DIV 標(biāo)記隱藏所有內(nèi)容,用 TABLE 標(biāo)記來(lái)顯示結(jié)果。我們將使用輪詢系統(tǒng)來(lái)檢查是否存在任何可用的隊(duì)列文檔。一般來(lái)說(shuō),這意味著我們將在稍后一段時(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. //過(guò)高的負(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. //如果我們無(wú)法找到表通知框  
  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)解除文檔鎖定。通常,可以通過(guò)觸發(fā) JavaScript OnBeforeUnLoad 事件或 OnUnload 事件達(dá)到此目的,這會(huì)打開(kāi)新的小型彈出式窗口,該彈出式窗口在加載頁(yè)面時(shí)做一些清理然后自行關(guān)閉。您自己可以使用彈出式窗口,但是其他人則不能使用,它將導(dǎo)致彈出式窗口受阻并使文檔永久保持鎖定狀態(tài)。要解決此問(wèn)題,我們?nèi)孕枰獌蓚€(gè) JavaScript 事件,但是并不是啟動(dòng)彈出式窗口,而是將通過(guò) 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 中訪問(wèn)。通常,ReleaseDocument 從鎖定的文檔列表中刪除文檔。

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


標(biāo)題名稱:ASP.NETAJAX示例:文檔鎖定程序
新聞來(lái)源:http://m.5511xx.com/article/cdhcshj.html