1

メソッドの実行中にaspxページのラベルを更新するにはどうすればよいですか?おそらくAJAX(更新パネル)を使用していますか?

private void button_Click(object sender, EventArgs e)
{
    doThings1();
    label.Text = "Status1";
    doThings2();
    label.Text = "Status2";
    doThings3();
    label.Text = "Done";  
}

少しずつ見せていきたいです。doThings1()が実行されているときにメソッドが実行されている間、「Status1」が表示され、doThings2()が実行され、「Status2」が表示されます...このように、ラベルには「Status1」と「Status2」は表示されません。プロセスが終了すると「完了」します。少しずつお見せしたいと思います。

4

3 に答える 3

2

これは、デスクトップアプリケーションの場合と同じように、簡単なことではありません。リクエストが終了した後も継続する非同期操作を開始する必要があります。クライアントに進行状況に関する更新についてサーバーを継続的にポーリングさせる必要があります。サーバー側の非同期コードは、ある種の共有状態を更新する必要があります(つまり、ポーリングメソッドが進行状況を読み取ることができるセッション、データベース、ビューステートなど)。すべての周りでそれは非常に非効率的であり(特にこれを行うユーザーがたくさんいる場合)、書くのに時間がかかります。 これを行うMSDNの例を次に示します。これにより、何が関係しているかがわかります。

于 2013-03-11T15:33:10.040 に答える
0

サーバーで実行されているタスクの進行状況を表示したいようです。Signalrライブラリを使用すると、サーバーからクライアントにリアルタイムの更新を送信できます。したがって、タスクがタスクのステージ(Status1、Status2など)を完了するたびに、新しいステータスでリスニングクライアントに更新を送信します。

また、JavaScriptでサーバーにタスクのステータスを数秒ごとに要求し、それをユーザーに表示することもできます。

于 2013-03-11T15:24:15.020 に答える
0

ルールは次のとおりです。1つの要求->1つの応答。別のアプローチ:これらのメソッドは3つのasyncron javascript呼び出しで実行し、成功コールバックでラベルのテキストを設定できます。

http://api.jquery.com/jQuery.ajax/

例:

$.ajax({
    type: "POST",
    url: "URL.asmx/doThings1",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(result) {
            // result will be "done" from the function of webservice below.
        // set the first label text
    },
    error: function(xmlHttpRequest, status, err) {
        alert(xmlHttpRequest.statusText + " " + xmlHttpRequest.status + " : " + xmlHttpRequest.responseText);
    }

});

これらの呼び出しを3回繰り返し、さまざまな関数で変更を行います。jqueryまたは純粋なjavascriptを使用して、クライアント側でボタンクリックを処理できます。

Webサービスまたは汎用ハンドラーを使用して、サーバー側のメソッドを実行できます。

Webサービスを作成する方法

[WebMethod]
    public string doThings1()
    {
        return "done";
    }
于 2013-03-11T15:31:56.410 に答える