このコードは「サーバー側」のコードです。
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() がありますが、それで問題が解決するとは思いません。これは、以前に提示したステートメントのいくつかに対して私が知っている唯一の例外です。