0

誰かが以下のコードを見て、私が間違っていることを教えてもらえますか?

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)};
                    }   
4

3 に答える 3

0

クライアント側のdo_progress関数の jQuery セレクターにエラーがあるようです。現在、名前付きの要素progress_statusを探していますが、クラスまたは ID を探しているとprogress_bar思われます。セレクターが何にも一致しない場合、エラーは発生せず、何もしません。

于 2014-01-15T04:36:54.030 に答える
0

ScriptManager.RegisterStartupScript の代わりに this.RegisterStartupScript を使用してみてください

于 2009-12-17T09:38:38.897 に答える
0

messagestring一重引用符で囲む必要がある値です"do_progress('"+message+"',"+percentComplete+");"

percentCompleteを含むintegerので、一重引用符で囲む必要はありませんmessage

string methods = string.empty;

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);

methods += "do_progress('"+message+"','"+percentComplete+"');"

}

次に、ここではstring変数内のすべてのメソッドをインクリメントし、関数を呼び出す前に準備ができwindow.onloadていることを確認してイベントで呼び出しています。DOMdo_progress

ScriptManager.RegisterStartupScript(this, this.GetType(), "progress", @"window.onload = function() {"+ methods +"}", true);

ただし、これはここでは必要ありません。準備ができたら呼び出しますwindow.onloadので、呼び出します。ScriptManager.RegisterStartupScriptDOM

最後に何が問題なのか正確にはわかりませんが、これは私のインスタントレビューです.

于 2009-12-17T07:45:56.360 に答える