Hi,
ich würde gern eine TextBox ( Statusfenster von einem Buildprozess ) während der Buildprozess läuft.
Dieser dauert 2-3 Minuten.
Aufbau der Seite:
<!-- Build >> STATUS -->
<asp:UpdatePanel ID="Upanel_build_status" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div id="container_build_status" runat="server" visible="true" style="margin-top: 20px;">
<div style="border: dashed gray 1px; width: 422px;">
<div class="table_CS_ReleaseHeader">
<asp:TextBox ID="TextBox_build_status" TextMode="MultiLine" runat="server" Width="400px"
CssClass="releaseBox" />
</div>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
Während dem Buildprozess rufe ich je nach Position eine Funktion auf:
private void AddStatusText(string a_text)
{
if (TextBox_build_status.Text == "")
{
TextBox_build_status.Text = a_text;
}
else
{
TextBox_build_status.Text += "\n" + a_text;
}
Upanel_build_status.Update();
}
Diese aktualisiert aber nicht wie gewünscht das Updatepanel und die darin enthaltene TextBox ( wahrscheinlich, weil die Page noch nicht fertig ist ), sondern haut alles am Schluss raus, was so nicht gewünscht ist. Ein paar Erklärungen in diesem Forum bestätigen auch die Vermutung.
Aber der Anwender soll schließlich wissen, was gerade passiert.
Wie umgeh / lös' ich das Problem?
Ein WebService? Ein JavaScript, das mit ne XML mit den aktuellen Statusmeldungen in den Container läd?
Ich möchte so wenig manuellen Code wie auch nur möglich eingeben müssen.
Danke für nen Tipp.
Grüße Abt
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo Abt,
Wenn ich Dich richtig verstanden habe möchtest Du auf einer ASP.Net Seite eine Textbox anzeigen, die realtime irgendwelche Ausgaben eines Serverprozesses anzeigt. ?(
Die einzige Technologie, die mir dazu einfällt ist AJAX !?
Gruß,
Thomas van Veen
Richtig, ich habe eine TextBox, die mir den aktuellen Stand meines Prozesses anzeigt.
Gefüttert wird diese TextBox über eine Funktion, die durch einen Button-Click-Event gestartet wird.
Die TextBox befindet sich in einem Ajax-Updatepanel (siehe erster Post).
Das UpdatePanel wird über die Funktion .Update() zur Aktualisierung gebracht, was aber nicht funktioniert.
Erst wenn die Funktion beendet ist, und die Page neu geladen ist ( trotz UpdatePanel ), wird der Inhalt der TextBox angezeigt.
Kleiner Ausschnitt:
private void OnButtonStartBuildClick(object a_sender, EventArgs a_eArgs)
{
// Container
container_build_status.Visible = true;
Upanel_build_status.Update();
AddStatusText("CHECK - Selection...");
// Check Selection
string a_selectedRelease = DDL_SeriesList.SelectedValue;
string a_selectedMedia = DDL_MediaSelection.SelectedValue;
if (DDL_SeriesList.SelectedIndex == 0)
{
AddStatusText("... please select a valid release");
return;
}
else if (a_selectedRelease == string.Empty || a_selectedRelease.Trim() == "")
{
AddStatusText("... please select a valid release");
return;
}
AddStatusText("... finished");
AddStatusText("Release Order...");
// Get Release Selection
Dictionary<string, string> a_releaseOrder = TcBuild.GetReleaseInstallationOrder(a_selectedRelease);
AddStatusText("... finished");
// Check Release
AddStatusText("CHECK - Release ...");
List<string> a_releaseCheck = TcBuild.CheckRelease(a_releaseOrder, a_selectedMedia);
}
Die relevante Funktion "AddStatusText" findet sich im ersten Post.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Du bist auf dem falschen Weg. Die Seite wird erst an den Browser geschickt, wenn der Page-Lifecycle vorbei ist, insbesondere also, wenn Page_Load beendet ist. Der Browser kriegt sein HTML+Javascript also erst, wenn der Server längst fertig ist mit der Berechnung. Das Aufrufen von Update() gaukelt nur vor, dass du dem Browser etwas schicken würdest. "Der Browser fragt regelmäßig nach, und dann wird eine Antwort gesendet" ist vermutlich die bessere Beschreibung.
Mit den Standard-Werkzeugen wirst du hier nicht so recht weiterkommen. Ein Service, der den Prozess anstartet und Auskunft (meinetwegen in Textform) über den Fortschritt geben kann, und der mit einem UpdatePanel kommuniziert, das einen sehr kurzen Aktualisierungszeitraum hat - das wäre vermutlich noch die programmierärmste Variante (mit AJAX Extensions und den Bordmitteln).
Ich möchte so wenig manuellen Code wie auch nur möglich eingeben müssen.
Hm. Du möchtest also programmieren, aber möglichst, ohne zu programmieren? 😉
"No Code". Das hätte man MS aber von vornherein sagen können, dass die Kampagne nach hinten losgeht.
Gruß,
LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
Ich möchte so wenig manuellen Code wie auch nur möglich eingeben müssen.
Hm. Du möchtest also programmieren, aber möglichst, ohne zu programmieren? 😉
Gruß,
LaTino
Manueller Code im Sinne von selbst geschriebenem Javascript.
Bessere Ausdruckweise wäre gewesen: möglichst alles in C# 😉
Werde mal die Variante mit dem Service in Angriff nehmen...
Danke soweit.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code