2009-07-04 4 views
2

Ich benutze UpdatePanel, um ein Button-Klick-Ereignis auszulösen, das über 100 Dateien in einem bestimmten Ordner speichert. Ich möchte, dass der Server den Client über den Status und die Anzahl der gespeicherten Dateien aktualisiert.Senden der Fortschrittsnachricht vom Server an den Client mit 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??????????? 
    } 
} 

Ich suche für einige Implementierung von „UpdateStatusOnClient“, von wo aus ich die gewünschte Nachricht an den Client senden kann, oder ein Etikett Nachricht asynchron aktualisieren, so dass der Kunde den Fortschritt und den Status von Dateien kennt gespeichert werden.

Danke.

+0

Wenn Sie "100+ Dateien speichern" meinen, bedeutet das, dass Ihre Seite 100 Dateien hochlädt? –

Antwort

2

Es ist nicht so einfach ... Sie können nicht aktiv etwas vom Server zum Client senden. Nur der Client kann eine Abfrage des Status anfordern.

Jetzt haben Sie bereits eine Anfrage läuft (der Klick auf die Schaltfläche). Aber das wird erst beendet, wenn die 100 Dateien gespeichert sind. Theoretisch könnten Sie ein kleines bisschen Daten senden, indem Sie in die Antwort schreiben und sie dann löschen, um sicherzustellen, dass die Daten übertragen werden. Ich habe das nie ausprobiert, und ich kenne keinen Ajax-Client, der mit einer solchen Antwort umgehen könnte.

Was ich tun würde, ist dies: Speichern Sie den aktuellen Status im ASP.NET-Session-Objekt, und machen Sie dann eine weitere Ajax Anfrage auf einen Timer, um den Status alle X Sekunden abzufragen. Beachten Sie, dass die Anforderung auf der Schaltfläche weiterhin ausgeführt wird (dies könnte zu Problemen führen). Möglicherweise möchten Sie stattdessen eine asynchrone Aktion auslösen.