0

Htmlテーブルとして形成されたリピーターがあります。プレビューは次のようになります。

| No |    Name   |    Status   |
--------------------------------
| 1. | Process A | In Progress |
| 2. | Process B | In Progress |
| 3. | Process C | In Progress |
| 4. | Process D | In Progress |
...
| n. | Process N | In Progress |
--------------------------------

更新パネル内にリピーターを配置しました。

ボタンをクリックすると、フォームはそのような送信プロセス関数を呼び出します。この関数は行ごとにループし、ステータステキストを「進行中」から「送信済み」に設定します。プロセスが約2秒であると仮定します。ステータステキストが割り当てられた後、UpdatePanel.Update()を介してRepeaterのステータステキストを更新したいのですが、私の問題はステータスが更新されないことです。関数が終了した後に更新されます。

send関数は次のようになります。

protected void btnSend_Clicked(object sender, EventArgs e) 
    {
        foreach (RepeaterItem item in rptData.Items) 
        {
            UpdatePanel upnlStatus = (UpdatePanel)item.FindControl("upnlStatus");
            Literal litStatus = (Literal)item.FindControl("litStatus");
            System.Threading.Thread.Sleep(2000);
            litStatusText = "Sent";
            upnlStatus.Update();                
        }
    }

私の質問は、これを行うための最良の方法は何ですか?アップデートパネルはこの種のリアルタイムアップデートをサポートしていますか?前もって感謝します。

4

1 に答える 1

0

更新パネルのAsyncPostbackのパターンは次のとおりです。

  1. クライアントがリクエストする
  2. サーバーはタスクを実行します
  3. クライアントが更新されます

したがって、2が完了するのを待ってから3を実行します。サーバープロセスが各AsyncPostbackの間にサーバー上に存在しなくなるため、サーバーでのタスクの実行からクライアントの更新をトリガーすることはできません。ページ全体が、各AsyncPostback間のビューステートから再作成されます。

やりたいことを行うには、タスクを非同期的に開始し、後で結果を取得する必要があります。これを行うための一般的な方法は、Webサービスを使用することです。これもチェックしてください。

于 2012-05-15T14:16:34.990 に答える