2010-12-26 9 views
1

in meinem ASP.NET MVC3-Projekt habe ich eine Aktion, die eine gewisse Zeit läuft. Es wäre schön, wenn es teilweise Antworten auf die Ansicht senden könnte. Das Ziel wäre, dem Benutzer einige Fortschrittsinformationen zu zeigen. Hat jemand eine Ahnung wie man das macht?Anzeige des Fortschritts bei langem Betrieb?

ich einen Versuch mit einigen direkten Ausgang auf die Antwort haben, aber es wird nicht in Teilen an den Client gesendet werden, aber alle auf einen Block:

[HttpPost] 
public string DoTimeConsumingThings(int someId) 
{ 
    for (int i = 0; i < 10; i++) 
    { 
     this.Response.Write(i.ToString()); 
     this.Response.Flush(); 
     Thread.Sleep(500); // Simulate time-consuming action 
    } 
    return "Done"; 
} 

Nach Ansicht:

@Ajax.ActionLink("TestLink", "Create", new AjaxOptions() 
    { HttpMethod = "POST", UpdateTargetId="ProgressTarget" })<br /> 

<div id="ProgressTarget"></div> 

Kann mir jemand helfen, progressive Action-Ergebnisse zu machen? Danke !!

Antwort

4

So können Sie dies implementieren: Beginnen Sie mit der Definition einer Klasse, die den Status der lang andauernden Operation enthält -> Sie benötigen Eigenschaften wie ID, Fortschritt, Ergebnis, ... Dann benötigen Sie zwei Controller Aktionen: eine, die die Aufgabe startet und eine weitere, die den Fortschritt zurückgibt. Die Start-Aktion erzeugt einen neuen Thread, um den lang andauernden Vorgang auszuführen und sofort zurückzukehren. Sobald eine Task gestartet wurde, können Sie den Status dieser Operation in einem gemeinsamen Speicher speichern, z. B. in der Anwendung mit der Task-ID.

Die zweite Controller-Aktion würde die Task-ID übergeben und die Anwendung abfragen, um den Fortschritt der angegebenen Task abzurufen. Während dieser Zeit wird der Hintergrundthread ausgeführt und bei jedem Fortschritt aktualisiert er den Fortschritt der Aufgabe in der Anwendung.

Der letzte Teil ist der Client: Sie können die Fortschrittskontrolle in regelmäßigen Abständen mit AJAX abfragen und den Fortschritt aktualisieren.

+0

Hallo Darin, danke für deine schnelle Antwort! Können Sie einen Vorschlag machen, wie Sie das regelmäßige AJAX-Polling durchführen können? Dies ist sicherlich der wichtigste Punkt in dieser Aufgabe. – Sascha

+0

@Sascha, Sie könnten die Funktion ['window.setInterval'] (https://developer.mozilla.org/en/DOM/window.setInterval) verwenden, um in regelmäßigen Abständen einen js-Code auszuführen. Wenn Sie jquery verwenden, können Sie eine Ajax-Anfrage mit der Methode ['$ .ajax()'] (http://api.jquery.com/jQuery.ajax/) senden. Etwas unter den Zeilen: 'window.setInterval (function() {$ .ajax (...);}, 5000);' –

+0

Danke für den Punkt! – Sascha

Verwandte Themen