誰かが以下のコードを見て、私が間違っていることを教えてもらえますか?
for(i=0;i<=Request.Files.Count;i++)
{
int percentComplete = (int)Math.Ceiling((double)(i + 1) / (double)Request.Files.Count * 100);
string message = string.Format("{0} of {1} uploaded", i + 1, Request.Files.Count);
ScriptManager.RegisterStartupScript(this, this.GetType(), "progress", @"do_progress("+message+","+percentComplete+");", true);
}
ループの各パスでクライアントを更新しようとしています。クライアント (フォーム タグ内) には、メッセージとパーセントの 2 つのパラメーターを受け取る "do_progress" という関数があります。私の意図は、ループの各パスでクライアント側のメソッドが起動することですが、何も起こりません。
アップデート
ご協力いただきありがとうございます。Ramiz、あなたのコードは、ループ内のすべてのメソッド (および進行状況) を収集し、同時にクライアントに送信するため、私の場合は機能しません。これでは進行状況が正確に表示されません (各ループはアップロードされたファイルの完了を表します)。サーバー側のループが完了するたびに、クライアント関数 do_progress にアクセスする必要があります。
また、ページは既に読み込まれており、(アップロード) ボタンがクリックされるとコードが実行されます。
そうは言っても、私はまだ問題を抱えています。「選択ソース」を見ると、以下のコードで必要な結果が得られていることを確認できます。
int percentComplete = (int)Math.Ceiling((double)(i + 1) / (double)Request.Files.Count * 100);
string message = string.Format("{0} of {1} uploaded", i + 1, Request.Files.Count);
ScriptManager.RegisterStartupScript(this, this.GetType(), "progress" + i, @"do_progress('" + message + "','" + percentComplete + "');", true);
しかし、クライアントで結果がリアルタイムで更新されていません。プログレス バーは動いておらず、カウンター (n 個中 n 個のファイル) は何もしていません。しかし、innerHTML を見ると、値が更新されています。非常に奇妙な。ページを更新する必要があるようですが、それは必要ありません。
私が使用しているクライアント側関数は、ページの最後にあるフォーム タグに配置され、次のようになります。
function do_progress(message,percent)
{
try {
$('progress_status').innerHTML = message;
$('progress_bar').attr("style", percent + "px");
}catch(e){alert(e.message)};
}