ExclusivePostBackCS.aspx 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <%@ Page Language="C#" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4. <script runat="server">
  5. protected void Button1_Click(object sender, EventArgs e)
  6. {
  7. System.Threading.Thread.Sleep(5000);
  8. Label1.Text = "Last update from server " + DateTime.Now.ToString();
  9. }
  10. protected void Button2_Click(object sender, EventArgs e)
  11. {
  12. System.Threading.Thread.Sleep(2000);
  13. Label2.Text = "Laster update from server " + DateTime.Now.ToString();
  14. }
  15. </script>
  16. <html xmlns="http://www.w3.org/1999/xhtml">
  17. <head runat="server">
  18. <title>PageRequestManager Multiple Asynchronous Postbacks Example</title>
  19. <style type="text/css">
  20. body {
  21. font-family: Tahoma;
  22. }
  23. div.MessageStyle
  24. {
  25. background-color: #FFC080;
  26. top: 95%;
  27. left: 1%;
  28. height: 20px;
  29. width: 600px;
  30. position: absolute;
  31. visibility: hidden;
  32. }
  33. </style>
  34. </head>
  35. <body>
  36. <form id="form1" runat="server">
  37. <div>
  38. <asp:ScriptManager ID="ScriptManager1" runat="server" />
  39. <script type="text/javascript" language="javascript">
  40. Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequest);
  41. var divElem = 'AlertDiv';
  42. var messageElem = 'AlertMessage';
  43. var exclusivePostBackElement = 'Button1';
  44. var exclusiveFlag;
  45. function InitializeRequest(sender, args)
  46. {
  47. var prm = Sys.WebForms.PageRequestManager.getInstance();
  48. if (prm.get_isInAsyncPostBack())
  49. {
  50. if (typeof exclusiveFlag != 'undefined' & exclusiveFlag )
  51. {
  52. args.set_cancel(true);
  53. // Set UI elements to inform users that
  54. // new asynchronous postback was canceled.
  55. ActivateAlertDiv('visible', 'A previous postback is still executing. The new postback has been canceled.');
  56. setTimeout("ActivateAlertDiv('hidden','')", 1500);
  57. }
  58. }
  59. else
  60. {
  61. exclusiveFlag = false;
  62. if (args.get_postBackElement().id == exclusivePostBackElement)
  63. {
  64. exclusiveFlag = true;
  65. }
  66. }
  67. }
  68. function ActivateAlertDiv(visString, msg)
  69. {
  70. var adiv = $get(divElem);
  71. var aspan = $get(messageElem);
  72. adiv.style.visibility = visString;
  73. aspan.innerHTML = msg;
  74. }
  75. </script>
  76. <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="Server" >
  77. <ContentTemplate>
  78. <fieldset>
  79. <legend>
  80. UpdatePanel 1
  81. </legend>
  82. The submit button in this panel invokes a long running process or critical process
  83. on the server that we want to make sure does not get overridden by another
  84. asynchronous postback. Multiple clicks of the submit button in this panel
  85. or panel 2 are intercepted and canceled until the response from any existing
  86. postback from this panel is finished.<br />
  87. <asp:Label ID="Label1" runat="server"></asp:Label><br />
  88. <asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click" />
  89. </fieldset>
  90. </ContentTemplate>
  91. </asp:UpdatePanel>
  92. <hr />
  93. <asp:UpdatePanel ID="UpdatePanel2" UpdateMode="Conditional" runat="Server" >
  94. <ContentTemplate>
  95. <fieldset>
  96. <legend>
  97. UpdatePanel 2
  98. </legend>
  99. Clicking the submit button in this panel while an existing postback from
  100. panel 1 is still processing causes the panel 2 postback to be canceled. Clicking
  101. the submit button in this panel multiple times results in the default behavior,
  102. that is, last postback wins.<br />
  103. <asp:Label ID="Label2" runat="server"></asp:Label><br />
  104. <asp:Button ID="Button2" runat="server" Text="Submit" OnClick="Button2_Click" />
  105. </fieldset>
  106. </ContentTemplate>
  107. </asp:UpdatePanel>
  108. <div id="AlertDiv" class="MessageStyle">
  109. <span id="AlertMessage"></span>
  110. </div>
  111. </div>
  112. </form>
  113. </body>
  114. </html>