Laden...

MessageBoxen werden verspätet angezeigt

Erstellt von Boubou vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.399 Views
B
Boubou Themenstarter:in
18 Beiträge seit 2006
vor 17 Jahren
MessageBoxen werden verspätet angezeigt

Hallo liebe myCSharpler,
erstelle mir "MessageBoxen":
string WarnungText = "Zuviele Fragen in der Matrix";
if (!ClientScript.IsClientScriptBlockRegistered("WindowOpener"))
{
string openScript =
"<script type=&quot;text/javascript&quot;>alert('FEHLER " +
WarnungText + " ')</script>";
ClientScript.RegisterClientScriptBlock(this.GetType(), "WindowOpener", openScript);
}
oder
string WarnungText = "Der Speicherprozess kann mehrere Minuten dauern, bitte nicht abbrechen";
if (!ClientScript.IsClientScriptBlockRegistered("WindowOpener"))
{
string openScript =
"<script type=&quot;text/javascript&quot;>alert('MELDUNG " +
WarnungText + " ')</script>";
ClientScript.RegisterClientScriptBlock(this.GetType(), "WindowOpener", openScript);
}
wenn Fehler entstehen oder gewollte bzw. ungewollte Ereignisse eintreten.
Sie werden im Debuggen auch alle erfolgreich durchlaufen. es wird aber nur die erste "MessageBox" nach allem abarbeiten gezeigt.
Wie kann ich das Programm erzwingen die "MessageBox" sofort anzuzeigen.
(Blöde Formulierung, ich weiss - trotzdem im voraus Dank an jeden Beantworter!)

😉

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
suchst du vielleicht ClientScript.RegisterStartupScript(...) ?

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

B
Boubou Themenstarter:in
18 Beiträge seit 2006
vor 17 Jahren

Hallo MarsStein,
habe ich versucht - indem ich die Zeile dahinter gesetzt habe

ClientScript.RegisterClientScriptBlock(this.GetType(), "WindowOpener", openScript);
ClientScript.RegisterStartupScript(this.GetType(), "WindowOpener", openScript);

ändert aber gar nicht - leider 😭
mache ich was falsch?
Grüße aus AC

😉

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
wenn Du RegisterStartupScript benutzt, brauchst Du das RegisterClientScriptBlock nicht mehr. Die beiden Funktionen machen genau das gleiche, nur daß die StartupScripts am Anfang des HTML-Dokuments eingebaut werden, und die anderen Scripts am Ende.

Die Scripte werden in der Reihenfolge ausgeführt, in der sie im Dokument stehen, AFAIK sogar direkt nach dem Parsen des jeweiligen <script>-Tags.
Wenn Du mehrere Skripte für eine Seite registrieren wilst, müssen die ScriptBlocks mit unterschiedlichen Namen registriert werden.

Ich bin mir auch nicht sicher, ob ich Dein Problem richtig verstanden habe, aber mit RegisterStartupScript wird auf jeden Fall das Script schon ausgeführt, bevor die Seite vollständig geladen ist -> man hat z.B. noch keinen Zugriff auf Elemente die weiter hinten im Dokument stehen.

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

460 Beiträge seit 2004
vor 17 Jahren

Hallo,
hier mal ein Beispiel:


    private void MessageboxAnzeigen(string Inhalt)
    {
        System.Text.StringBuilder SB = new System.Text.StringBuilder();
        SB.Append("<script type=\"text/javascript\">alert('");
        SB.Append(Inhalt);
        SB.Append("')</script>");        
        ClientScript.RegisterClientScriptBlock(Page.GetType(), "myKey", SB.ToString());        
    }

Der zweite Übergabeparameter ist einfach der name deines registrierten Scripts.
Wenn du ein zweites script registrieren möchtest, musst du natürlich einen anderen Namen für den Key nutzen.
Korrigiert mich bitte wenn ich falsch liege.

Zitat aus der MSDN:

Parameter
type
Der Typ des zu registrierenden Clientskripts.

key
Der Schlüssel des zu registrierenden Clientskripts.

script
Das zu registrierende Clientskriptliteral.

B
Boubou Themenstarter:in
18 Beiträge seit 2006
vor 17 Jahren

Hallo Ihr 2 Lieben, die mir geantwortet haben,
und alle anderen, die mir antworten könnt,

das ist nicht mein Problem;
Die Messageboxen funktionieren alle einzeln,
nur sie werden nicht zum Fehler-, Warnungszeitpunkt dargestellt, sondern es wird nur immer die jeweils Letzte nach allen Bearbeitungen dargestellt.
Mein Problem ist leider nicht wie erstelle ich eine MessageBox, sondern wie sorge ich dafür, dass sie zum richtigen Zeitpunkt dargestellt werden.

Würde mich über jede Antwort freuen

😉

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
ich glaube ich hane Dich bisher falsch verstanden. Das hört sich mittlerweile für mich so an als wolltest Du MessageBoxen auf dem Client anzeigen, während Deine Seitenverabeitung gerade läuft -> das geht aber nicht! Denn der Client kann erst reagieren, wenn der Server geantwortet hat. Und das tut der Server erst wenn er nach abarbeiten der Anfrage die Response zusammengestellt hat. Du könntest also mehrere Messageboxen anzeigen,was alles schiefgelaufen ist, indem Du sie an den entsprechenden Stellen in Deinem Code als Startup-Skripte registrierst, aber während der Verarbeitung gehts wirklich nicht.

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca