2009-07-04 6 views
2

私はUpdatePanelを使用して、指定されたフォルダに100以上のファイルを保存するボタンクリックイベントをトリガーしています。 保存しているファイルのステータスと数について、サーバーがクライアントを更新するようにします。Ajaxを使用してサーバからクライアントに進捗メッセージを送信

protected void btnSave_Click(...){  
    var filesToSave = GetFilesToSave(); 
    foreach(var fileToSave in filesToSave){ 
    SaveProcessedFile(fileToSave);//It takes almost 30seconds to save a file 
    UpdateStatusOnClient(fileToSave); //Don;t know what should be done here??????????? 
    } 
} 

私は私がクライアントに必要なメッセージを送ったり、クライアントが保存されたファイルの進行状況を知っているように、非同期にラベルのメッセージを更新することができ、そこから「UpdateStatusOnClient」のいくつかの実装を探しています。

ありがとうございました。

+0

「100個以上のファイルを保存しています」と言うと、ページに100個のファイルがアップロードされていますか? –

答えて

2

これは簡単ではありません。サーバからクライアントに積極的に何かを送ることはできません。クライアントのみがステータスの照会を要求できます。

これで、既にリクエストが実行されています(ボタンをクリック)。しかし、それは100のファイルが保存されると終了します。理論的には、レスポンスに書き込み、それをフラッシュしてデータが送信されることを確認することで、小さなデータを送信することができます。私はそれを試みたことはありません。そのような対応に対応できるAjaxクライアントはわかりません。

これは、ASP.NETセッションオブジェクトに現在のステータスを保存してから、タイマーで別のAjaxリクエストを作成して、X秒ごとにステータスをクエリします。これを実行している間は、ボタンの要求はまだ実行中であることに注意してください(問題が発生する可能性があります)。代わりに、非同期アクションをトリガーすることができます。

関連する問題