2016-07-27 41 views
0

Ich habe eine große Methode, die ein Excel-Dokument analysiert. Um das ganze Excel zu parsen, braucht es vorerst etwa 10 Minuten (ja, ein sehr großes Excel-Dokument mit vielen Blättern). Die Methode wird aufgerufen, wenn der Benutzer einen bestimmten Wert aus einer Dropdown-Liste auswählt. Ich verwende die folgende Blockfunktion, um ein Panel zu blockieren, um dem Benutzer anzuzeigen, dass das Parsing verarbeitet.Mein Update-Panel wird nicht entsperrt

Das Problem ist, dass, wenn mein Excel-Dokument mehr als 4 Minuten benötigt, um analysiert zu werden, bleibt mein Panel für immer blockiert !! Ich habe eine Zeitsperre-Funktion eingestellt und funktioniert, aber ich möchte nicht ein Timeout hinzufügen, um mein Panel zu entsperren, weil ich nicht weiß, die Zeit, die das Excel braucht, um analysiert zu werden.

Ich versuche, aus dem Code der folgenden hinter haben:

ohne Glück
string sScript = ""; 
    sScript = sScript + "function unlockUI() {"; 
    sScript = sScript + @"$('#<%=UpdPnl_RevReports.ClientID%>').unblock();" ; 
    sScript = sScript + "}"; 


    // REGISTER NOW. 
    Page.ClientScript.RegisterStartupScript(this.GetType(), "Registered Script", sScript, true); 

Leider! Ich habe die JavaScript-Funktion aus dem Code hinten am Ende der Methode aufgerufen aber immer noch kein Glück.

Ich weiß nicht, warum das Panel blockiert bleibt, auch wenn meine Methode fertig ist.

Könnten Sie bitte etwas vorschlagen?

+0

hat einiges Ergebnis aus der Verarbeitung ein Benutzer erwarten? Es ist besser, sofort ein "Ticket" an einen Benutzer zurückzugeben und die Verarbeitung in den Hintergrund zu stellen. Am Ende des Prozesses speichern Sie das Ergebnis mit Ticket zu einer Datenbank oder Datei. Der Benutzer kann dann das Ergebnis mit seinem Ticket überprüfen. –

Antwort

1

Sie können versuchen, diese in Code-Behind:

ScriptManager.RegisterStartupScript(this, this.GetType(), "Registered script", string.Format("$('#{0}').unblock();", UpdPnl_RevReports.ClientID), true); 

Sie können auch die Timeout für asynchrone Postbacks in dem Script erhöhen:

<asp:ScriptManager ID="scriptManager1" runat="server" AsyncPostBackTimeout="1800" /> 
+0

Sorry, kein Glück mehr! – apoellitsi

+0

Können wir (in der Frage) den Event-Handler sehen, wo dieser Code aufgerufen wird? Und wie wird die langwierige Verarbeitung in Code-Behind initiiert, wenn es nicht in der gleichen Funktion ist? – ConnorsFan

+0

Ich rufe die Funktion genau bevor meine Methode existiert. Wenn ich einen Haltepunkt hinzufüge, kann ich sehen, dass es tatsächlich von diesem Code übergeht, und dann ist die Methode vorhanden. – apoellitsi