SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




PostBack und JavaScript

Geprüfte Antwort Dieser Beitrag hat 9 Antworten

Ohne Rang
194 Beiträge
Florian Lippert erstellt 13 Sept. 2012 12:12
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Leute,

ich habe die Situation, dass ich nach einem Klick auf einen Button (+ Daten laden und an ein asp-Element übertragen) ein JavaScript ausführen möchte. Es soll also erst der Inhalt erzuegt werden und dann z.B. eine Animation stattfinden.

Das Problem hierbei ist allerdings auch, dass ich bei Klicks auf unterschiedliche Elemente auch unterschiedliche JS-Codes ausführen möchte.

z.B. Button1 ruft nach der eigenen Aktion JS-Methode1 auf und Button 2 die JS-Methode 2

Was ich bis jetzt hin bekomme ist, dass ich in der .ascx eine JavascriptMethode aufrufe - diese ist allerdings für jeden Klick gültig...

Was ich nun suche ist: Wo muss der javaScript-Code eingebunden/aufgerufen werden damit das beschriebene Ergebnis erreicht wird. Leider habe ich bisher keinen Beitrag zu dieser Situation gefunden..

Vielen Dank!

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 13 Sept. 2012 16:06
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Du kannst direkt im Button_Click Eventhandler JavaScript ausgeben mit
Response.Write("<script type='javascript'>alert('Hallo Welt');</script>");

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
194 Beiträge
Florian Lippert Als Antwort am 14 Sept. 2012 10:00
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke für die Antwort.

Allerdings muss ich nochmal nachfragen:

1. Wenn ich den genannten Code im Page_Load ausführe passiert garnichts mehr. Warum?

2. Wenn ich den Code im Click Event ausführe bekomme ich diese Meldung:

"Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled."

Kann ich dagegen was tun? Und falls die Frage kommen sollte: Ja, mein Control liegt in einem UpdatePanel (und muss da auch liegen)...

Danke!

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 14 Sept. 2012 12:06
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Florian Lippert"]mein Control liegt in einem UpdatePanel [/quote]

Sorry, aber wie man das in diesem Fall lösen kann, weiß ich nicht.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
194 Beiträge
Florian Lippert Als Antwort am 17 Sept. 2012 15:01
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke trotzdem :-)
Es hat sich jetzt eine nicht ganz so saubere Lösung gefunden:

Da ich in der Site mit Updatepanels arbeite, bleibt der Seitenkörper immer der gleiche. In diesem (der default.aspx) wurden nun JS Variablen festgelegt die ViewStates (true oder false) speichern. Nun wird bei jedem Postback in einem UpdatePanel ein JS gestartet, dass mit diesen Werten arbeitet und den Inhalt der divs im updatepanel auf Inhalt prüft und so entscheidet ob es angezeigt werden soll oder nicht. Bei einem Statuswechsel wird eine Animation erzeugt, ansonsten bleibt der VieState gleich und das div wird einfach auf "display:none / inline (oder was auch immer)" gesetzt.

Ist evtl. nicht die sauberste Lösung aber sie funktioniert ^^

Ohne Rang
194 Beiträge
Florian Lippert Als Antwort am 16 Sept. 2013 11:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Servus,

ich muss leider das Thema mehr oder weniger nochmal eröffnen.

Dies mal ist die Situation etwas anders:

Benötigt wird ein Button der eine längere Aktion ausführt - damit der Benutzer aber weiß, dass gearbeitet wird soll eine Ladeanimation (ein GIF) angezeigt werden.

Also ist der Vorgang nach dem Klick wäre dann eig:

1. GIF einblenden

2. Postback des buttons ausführen

3. Wenn Code ausgeführt -> GIF ausblenden

Vom Postback bzw. der Aktion sollen keine Infos an die Oberfläche übergeben werden.

Ich bin in Andis Block über diesen Beitrag gestolpert: http://blogs.evocom.de/af/archive/2013/05/23/eigener-button-zum-dateidownload.aspx

Hier scheint es mir aber so zu sein, dass egal wie lange die Funktion die aufgerufen wird dauert der javaScript Code nach x sekunden ausgeführt wird und daher nicht ganz der Anforderung entspricht... gibt es schnelle und saubere Lösungen dafür?

Ich bin im Netz eig nur über Lösungen gestolpert die vor dem Postback etwas realisieren , danach aber nicht...

Vielen Dank für die kommende Hilfe ;)

VG

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 16 Sept. 2013 11:25
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich habe das Gefühl, daß Du hier etwas durcheinander bringst. Du willst eine längere Aktion per JavaScript auslösen und einen Postback? Das widerspricht sich.

Entweder Du machst gleich einen Postback und führst dann die Aktion auf dem Server aus. Dem Benutzer kannst Du das mit SPLongRunningOperation signalisieren. Oder Du rufst eine länger dauernde JavaScript-Funktion auf, machst dabei aber keinen Postback. Das JavaScript kann dabei durchaus auch mit dem Server kommunizieren. Die Technik dazu nennt sich Ajax.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
194 Beiträge
Florian Lippert Als Antwort am 16 Sept. 2013 11:32
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi Anid,

danke für die Rückmeldung.

Eigentlich soll das JavaScript dem eigentlichen PostBack des Buttons eine Aktion (Einblenden bzw. Ausblenden) vor und nach schalten.

Somit soll eig der JS-Code nur den Postback anstoßen und nicht selbst ausführen.

Oder ist genau DAS nicht möglich?

 

Das sich das mit der Kommunikation AJAX nennt weiß ich ja, aber ich sag es mal so: "Diese Lösung wäre als letztes zu verwenden."

Daher die Aussage, dass keine Informationen an die Oberfläche weitergegeben haben - außer "vorgang beenden" der durch das ausblenden erfolgt...

 

Oder steh ich direkt zum Anfang der Woche schon auf dem Schlauch? :D

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 16 Sept. 2013 12:05
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wenn Du per JavaScript einen Postback auslöst, wird ja die Seite an den Server geschickt und der Browser erwartet eine neue Seite. Deshalb bringt es hier nichts ein animiertes GIF oder sowas anzuzeigen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
194 Beiträge
Florian Lippert Als Antwort am 16 Sept. 2013 11:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]

Dem Benutzer kannst Du das mit SPLongRunningOperation signalisieren.

[/quote]

Das sieht sehr gut aus... ich werde das mal testen... danke!