回答編集履歴

7

脱字追加

2022/11/10 06:15

投稿

退会済みユーザー
test CHANGED
@@ -127,7 +127,7 @@
127
127
 
128
128
  protected void Button1_Click(object sender, EventArgs e)
129
129
  {
130
- // ラベルの変化の途中経過が分かるように 1 待機
130
+ // ラベルの変化の途中経過が分かるように 1 待機
131
131
  System.Threading.Thread.Sleep(1000);
132
132
 
133
133
  count++;

6

コードに C#

2022/11/10 06:14

投稿

退会済みユーザー
test CHANGED
@@ -103,7 +103,7 @@
103
103
  **.aspx.cs**
104
104
 
105
105
 
106
- ```
106
+ ```C#
107
107
  using System;
108
108
 
109
109
  namespace WebForms1

5

訂正

2022/11/10 06:11

投稿

退会済みユーザー
test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
  下のコメント欄の 2022/11/10 14:54 の私のコメントで「後で、検証に使ったサンプルコードを回答欄に追記しておきます」と書いた件です。
36
36
 
37
- そもそも while(true) ループで $('#<%=this.btnUpdate.ClientID %>').click(); を繰り返すというのがダメで、のコメントに書いたフラグ案では対処できなかったです。
37
+ そもそも while(true) ループで $('#<%=this.btnUpdate.ClientID %>').click(); を繰り返すというのがダメで、のコメントに書いたフラグ案では対処できなかったです。
38
38
 
39
39
  以下のコードでは、[更新]ボタンクリックでは一回だけ $('#<%=this.btnUpdate.ClientID %>').click(); を行い、その応答が返ってきて OnEndRequest が呼ばれたらその中で隠しフィールドが 1 でないときは再度 $('#<%=this.btnUpdate.ClientID %>').click(); することで対応しています。
40
40
 

4

追記2

2022/11/10 06:10

投稿

退会済みユーザー
test CHANGED
@@ -35,6 +35,8 @@
35
35
  下のコメント欄の 2022/11/10 14:54 の私のコメントで「後で、検証に使ったサンプルコードを回答欄に追記しておきます」と書いた件です。
36
36
 
37
37
  そもそも while(true) ループで $('#<%=this.btnUpdate.ClientID %>').click(); を繰り返すというのがダメで、上のコメントに書いたフラグ案では対処できなかったです。
38
+
39
+ 以下のコードでは、[更新]ボタンクリックでは一回だけ $('#<%=this.btnUpdate.ClientID %>').click(); を行い、その応答が返ってきて OnEndRequest が呼ばれたらその中で隠しフィールドが 1 でないときは再度 $('#<%=this.btnUpdate.ClientID %>').click(); することで対応しています。
38
40
 
39
41
  サーバー側で隠しフィールドが 1 に書き換えられる条件は、サーバー側のボタンクリックのイベントハンドラ(下のコードでは Button1_Click)が 3 回呼ばれたらとしています。カウントには ViewState を使います。
40
42
 

3

追記2

2022/11/10 06:08

投稿

退会済みユーザー
test CHANGED
@@ -19,6 +19,8 @@
19
19
 
20
20
  不明点があれば下のコメント欄で質問してください。
21
21
 
22
+ ---
23
+
22
24
  **【追記】**
23
25
 
24
26
  PageRequestManager のイベントの使用例を紹介しておきます。
@@ -26,3 +28,114 @@
26
28
  http://surferonwww.info/BlogEngine/post/2010/12/12/Cancel-request-using-PageRequestManager.aspx
27
29
  二度押し防止
28
30
 
31
+ ---
32
+
33
+ **【追記2】**
34
+
35
+ 下のコメント欄の 2022/11/10 14:54 の私のコメントで「後で、検証に使ったサンプルコードを回答欄に追記しておきます」と書いた件です。
36
+
37
+ そもそも while(true) ループで $('#<%=this.btnUpdate.ClientID %>').click(); を繰り返すというのがダメで、上のコメントに書いたフラグ案では対処できなかったです。
38
+
39
+ サーバー側で隠しフィールドが 1 に書き換えられる条件は、サーバー側のボタンクリックのイベントハンドラ(下のコードでは Button1_Click)が 3 回呼ばれたらとしています。カウントには ViewState を使います。
40
+
41
+ **.aspx**
42
+
43
+
44
+ ```
45
+ <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm11.aspx.cs"
46
+ Inherits="WebForms1.WebForm11" %>
47
+
48
+ <!DOCTYPE html>
49
+
50
+ <html xmlns="http://www.w3.org/1999/xhtml">
51
+ <head runat="server">
52
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
53
+ <title></title>
54
+ <script src="Scripts/jquery-3.4.1.js"></script>
55
+ <script type="text/javascript">
56
+ //<![CDATA[
57
+ var manager;
58
+
59
+ function pageLoad(sender, args) {
60
+ if (args.get_isPartialLoad() === false) {
61
+ manager = Sys.WebForms.PageRequestManager.getInstance();
62
+ manager.add_initializeRequest(OnInitializeRequest);
63
+ manager.add_endRequest(OnEndRequest);
64
+ }
65
+ }
66
+
67
+ function OnInitializeRequest(sender, args) {
68
+
69
+ }
70
+
71
+ function OnEndRequest(sender, args) {
72
+ if ($('#<%=HiddenField1.ClientID %>').val() != "1") {
73
+ $('#<%=Button1.ClientID %>').click();
74
+ }
75
+ }
76
+
77
+ function btnLoopUpdClick() {
78
+ $('#<%=Button1.ClientID %>').click();
79
+ }
80
+ //]]>
81
+ </script>
82
+ </head>
83
+ <body>
84
+ <form id="form1" runat="server">
85
+ <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
86
+
87
+ <input type="button" id="btnLoopUpd" value="更新" onclick="btnLoopUpdClick()"/>
88
+
89
+ <asp:UpdatePanel ID="UpdatePanel1" runat="server">
90
+ <ContentTemplate>
91
+ <asp:Button ID="Button1" runat="server" Text="Button"
92
+ OnClick="Button1_Click" />
93
+ <asp:HiddenField ID="HiddenField1" runat="server" />
94
+ <asp:Label ID="Label1" runat="server"></asp:Label>
95
+ </ContentTemplate>
96
+ </asp:UpdatePanel>
97
+ </form>
98
+ </body>
99
+ ```
100
+
101
+ **.aspx.cs**
102
+
103
+
104
+ ```
105
+ using System;
106
+
107
+ namespace WebForms1
108
+ {
109
+ public partial class WebForm11 : System.Web.UI.Page
110
+ {
111
+ int count;
112
+
113
+ protected void Page_Load(object sender, EventArgs e)
114
+ {
115
+ if (!IsPostBack)
116
+ {
117
+ ViewState["Count"] = 0;
118
+ Label1.Text = "初期画面";
119
+ }
120
+ else
121
+ {
122
+ count = (int)ViewState["Count"];
123
+ }
124
+ }
125
+
126
+ protected void Button1_Click(object sender, EventArgs e)
127
+ {
128
+ // ラベルの変化の途中経過が分かるように 1 待機
129
+ System.Threading.Thread.Sleep(1000);
130
+
131
+ count++;
132
+ if (count > 2)
133
+ {
134
+ HiddenField1.Value = "1";
135
+ }
136
+ Label1.Text = $"count: {count}, hidden: {HiddenField1.Value}";
137
+ ViewState["Count"] = count;
138
+ }
139
+ }
140
+ }
141
+ ```

2

追記

2022/11/09 01:11

投稿

退会済みユーザー
test CHANGED
@@ -18,3 +18,11 @@
18
18
  https://learn.microsoft.com/ja-jp/previous-versions/visualstudio/visual-studio-2008/bb398976(v=vs.90)
19
19
 
20
20
  不明点があれば下のコメント欄で質問してください。
21
+
22
+ **【追記】**
23
+
24
+ PageRequestManager のイベントの使用例を紹介しておきます。
25
+
26
+ http://surferonwww.info/BlogEngine/post/2010/12/12/Cancel-request-using-PageRequestManager.aspx
27
+ 二度押し防止
28
+

1

追記

2022/11/09 01:03

投稿

退会済みユーザー
test CHANGED
@@ -16,3 +16,5 @@
16
16
 
17
17
  PageRequestManager のイベントの処理
18
18
  https://learn.microsoft.com/ja-jp/previous-versions/visualstudio/visual-studio-2008/bb398976(v=vs.90)
19
+
20
+ 不明点があれば下のコメント欄で質問してください。