1

操作がうまくいかないときにタイマーを開始し、30 秒待ってからタイマーを停止し、操作を再試行するページがあります。タイマーが開始するたびに、ラベルのテキストを変更してユーザーに通知する必要があります。

どうすればいいですか?

4

3 に答える 3

4

私の理解が正しければ、代わりにクライアント側 (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
}

その他の可能性については、次の質問/回答を参照してください。

于 2009-01-03T15:46:12.247 に答える
1

クライアント側からポストバックを強制するには、__doPostBack メソッドを直接呼び出すことができます

EVENTTARGET と EVENTARGUMENT の 2 つの引数を取ります。通常のasp.netサイクルの外でこの呼び出しを行っているため、ページロードイベント(またはinit、選択)でIsPostBackを確認する必要があります-ポストバックの場合は、ロールされる2つの引数を確認する必要がありますフォーム要素 (Request.Form["__EVENTTARGET"]) としてアップします。それらの値をチェックして、ポストバックが呼び出しまたは他のコントロールのいずれかから来たかどうかを確認します。それらの値がクライアント側から渡したものと一致する場合は、ラベル テストに変更を加えます。

于 2009-01-03T15:07:15.150 に答える