操作がうまくいかないときにタイマーを開始し、30 秒待ってからタイマーを停止し、操作を再試行するページがあります。タイマーが開始するたびに、ラベルのテキストを変更してユーザーに通知する必要があります。
どうすればいいですか?
私の理解が正しければ、代わりにクライアント側 (javascript) タイマーを使用する必要があると思います。これにはサーバー側のタイマーを使用できません。
エラー状態を検出したら、それに応じてラベルを更新し、それをユーザーに表示します。同時に、30 秒後にポストバックするクライアント側のタイマーを呼び出します。
たとえば、次のタイマー コードをページに追加します。
<script>
function StartTimer()
{
setTimeout('DoPostBack()', 30000); // call DoPostBack in 30 seconds
}
function DoPostBack()
{
__doPostBack(); // invoke the postback
}
</script>
エラー状態の場合、クライアント側のタイマーが開始されることを確認する必要があります。
if (error.Code == tooManyClientsErrorCode)
{
// add some javascript that will call StartTimer() on the client
ClientScript.RegisterClientScriptBlock(this.GetType(), "timer", "StartTimer();", true);
//...
}
これがお役に立てば幸いです (現在、Visual Studio を利用できないため、コードはテストされていません)。
アップデート:
ボタンのクリックを「シミュレート」するには、ボタンのクライアント ID を __doPostBack() メソッドに渡す必要があります。
function DoPostBack()
{
var buttonClientId = '<%= myButton.ClientID %>';
__doPostBack(buttonClientId, ''); // simulate a button click
}
その他の可能性については、次の質問/回答を参照してください。
クライアント側からポストバックを強制するには、__doPostBack メソッドを直接呼び出すことができます
EVENTTARGET と EVENTARGUMENT の 2 つの引数を取ります。通常のasp.netサイクルの外でこの呼び出しを行っているため、ページロードイベント(またはinit、選択)でIsPostBackを確認する必要があります-ポストバックの場合は、ロールされる2つの引数を確認する必要がありますフォーム要素 (Request.Form["__EVENTTARGET"]) としてアップします。それらの値をチェックして、ポストバックが呼び出しまたは他のコントロールのいずれかから来たかどうかを確認します。それらの値がクライアント側から渡したものと一致する場合は、ラベル テストに変更を加えます。