1

コードビハインドに while ループがあり、進行状況を監視したいので、ループに入るたびに、ページが何か (ポイント) を描画し、ループが中断されたときに全体の進行状況 (散布図) が表示されるようにします。コードは次のようなものです。

          while (iter <= Common.maxIter)
          {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "myFunc" + iter.ToString(), "Display()", true);

            //doing something else
           }

関数 Display() は、毎回 1 つのポイントを描画します。私の問題は、while ループから抜け出した後でのみ、すべてのバーが同時に描画されますが、ループ中にはどれも描画されないことです...:(ブレークポイントと、このコードが毎回実行されるのを見ることができますが、私のページには表示されません。

これを行う正しい方法を知っている人はいますか?どうもありがとう!

4

1 に答える 1

2

このコードは「サーバー側」のコードです。

while (iter <= Common.maxIter)
          {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "myFunc" + iter.ToString(), "Display()", true);

            //doing something else
           }

これは「クライアント側」のコードですが:

"myFunc" + iter.ToString(), "Display()"...

ASP.NET が機能する方法は、「サーバー側」で一連のイベントを実行することです。これは「ページ ライフ サイクル」とも呼ばれます。PreInit、Init、PreLoad、Load、PreRender、Render、UnLoad などのイベントの例をいくつか挙げるだけで、これらのイベントのいくつかは既にご存知かもしれません。

最も頻繁に使用されるのはページ読み込みイベントだと思います。コード サンプルはそのメソッド内にも配置されていたと思います。

直面している問題を説明するために、このイベントのドキュメントを確認する場合は、「レンダリング」イベントに焦点を当てましょう:

protected override void Render(HtmlTextWriter output) {
    if ( (HasControls()) && (Controls[0] is LiteralControl) ) {
        output.Write("<H2>Your Message: " + ((LiteralControl) Controls[0]).Text + "</H2>");
    }
}

このイベントは、基本的にストリームである" HtmlTextWriter " を使用することに気付くでしょう。強調表示した理由は、ページのライフ サイクル中にコントロールまたはページに対して実行するすべてのアクション/変更が、ページのライフ サイクルの最後にこのストリームに書き込まれ、このストリームが html としてユーザーに送り返されるためです。 .

したがって、問題に戻ると、ユーザーに送信される HTML ストリームに「javascript」を追加しています。そのため、ページのライフサイクルが終了すると、すべてが一度に*ユーザーに返されます。

  • *部分レンダリングに使用できるメソッド Response.Flush() がありますが、それで問題が解決するとは思いません。これは、以前に提示したステートメントのいくつかに対して私が知っている唯一の例外です。
于 2014-01-01T20:02:49.343 に答える