Marco Thode: Public Function mit Javascript in Code Behind aufrufen

Hi!

In meinem ASP.NET Code Behind habe ich zwei Public Functions. myPublic1() und myPublic2().
Kann ich Javascript anweisen diese Methoden aufzurufen?

ich dachte:
If(expression)
{
 myPublic1()
}
else
{
 myPublic2()
}

Gruß

  1. Moin!

    In meinem ASP.NET Code Behind habe ich zwei Public Functions. myPublic1() und myPublic2().
    Kann ich Javascript anweisen diese Methoden aufzurufen?

    Welches Javascript? Clientseitiges oder serverseitiges? Die Anworten dazu sind in der Reihenfolge "Nein" und "Ja".

    Wobei das "Nein" ergänzt werden kann um "Mit Workarounds gehts sicher irgendwie auch, beispielsweise mit AJAX - dann aber anders, als du vermutlich bisher planst".

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!
    1. Sers

      Welches Javascript? Clientseitiges oder serverseitiges? Die Anworten dazu sind in der Reihenfolge "Nein" und "Ja".

      Clientseitig.
      Könnte ich nicht irgendwas mit doPostBack('','') machen und übergebene Parameter im Page_Load Event auslesen? Ich weiss nur leider nicht wie man das macht.

      Gruß

      1. Moin!

        Welches Javascript? Clientseitiges oder serverseitiges? Die Anworten dazu sind in der Reihenfolge "Nein" und "Ja".

        Clientseitig.
        Könnte ich nicht irgendwas mit doPostBack('','') machen und übergebene Parameter im Page_Load Event auslesen? Ich weiss nur leider nicht wie man das macht.

        Nein. Überlege dir mal genau, welcher Ablauf passiert:
        1. Client ruft die URL deines ASP-Skriptes auf.
        2. ASP-Skript generiert HTML-, CSS- und Javascript-Output und wird beendet.
        3. Server sendet den Output zum Browser.
        4. Browser zeigt den Output an.
        5. Der Benutzer verursacht eine Javascript-Aktion...

        Und an dieser Stelle willst du eine Funktion eines Skriptes aufrufen, welches schon lange "gestorben" ist - wird wohl nicht gehen. Du mußt also in jedem Fall einen erneuten HTTP-Kontakt zum Server herstellen.

        AJAX ist derzeit das modernste Mittel, um das zu realisieren. Die Alternativen wären versteckte Frames oder IFrames, um einen unsichtbaren Bereich zu haben, in dem man mit Javascript ein Ergebnis vom Server anfordern (location.href passend verändern) und auslesen kann. Das bedeutet aber für dein Skript, dass es alle zur Funktionsausführung benötigten Daten irgendwie neu besorgen muß (Session, DB-Abfragen o.ä., etc.), weil es ein komplett neuer Skriptaufruf ist.

        - Sven Rautenberg

        --
        My sssignature, my preciousssss!
        1. Hi Sven,

          grundsätzlich hast du Recht. Allerdings scheinst du das ASP.net
          Programmiermodell nicht zu kennen, es unterscheidet sich sehr von
          ASP Classic (von welchem du anscheinend ausgehst).

          doPostBack(...) ist genau der Punkt an der von der Client-Seite ein
          erneuter HTTP-Kontakt zum Server durch Absenden des Formulars in der
          ASPX Seite an dieselbe Adresse eingeleitet wird. Damit wird auch die
          Ausführung von serverseitigen Methoden wie der AP es will wieder
          möglich.

          Eine ASPX Seite von ASP.net ist fast ausschließlich immer über ein
          <form>...</form> auf der Client-Seite realisiert.

          Aber der AP ist trotzdem auf dem falschen Weg.

          Grüße, Frank

          1. Hi Frank

            Aber der AP ist trotzdem auf dem falschen Weg.

            Magst du mir nicht einen Hinweis geben.

  2. Hallo,

    wie Sven Rautenberg schon in seinen Ausführungen bemerkte, das, was du
    vorhast deckt sich nicht mit deinen Lösungsansätzen. :)

    Du solltest dich nochmal eingehend mit dem ASP.net Programmiermodell
    beschäftigen (generell gesehen).

    Zu deinem eigentlichen Problem:

    • Warum und wann (auf Basis welcher Begebenheit) willst deine öffent-
        lichen Methoden ausführen?
    • Was tut ASP.net um dir die Reaktion auf einen Button-Klick zu
        ermöglichen?

    Damit solltest du selbst auf eine adäquate Lösung deines Problems kommen.
    (doPostBack(...) ist grundsätzlich die richtige Richtung)

    Grüße,
    Frank

    1. Hi!

      Zu deinem eigentlichen Problem:

      • Warum und wann (auf Basis welcher Begebenheit) willst deine öffent-
          lichen Methoden ausführen?

      Ich wollte meine Seite in einen Zustand versetzten die mir diese (jetzt nicht mehr öffentliche) Methode bereitstellt. Eine clientseite javascript Funktion bietet mir nun eine fast gleiche Funktionalität. Ich denke das ist eh' eine bessere Vorgehensweise, außerdem spare ich dadurch einmal das Nachladen.

      • Was tut ASP.net um dir die Reaktion auf einen Button-Klick zu
          ermöglichen?

      Ich bekomme kein Click-Event, weil ich auf das Ergebnis einer Confirm-Box reagieren möchte. Klar, da wird auch ein Button gedrückt aber kann ich auf dessen Events reagieren?

      (doPostBack(...) ist grundsätzlich die richtige Richtung)

      Dennoch interessiert mich, wie ich einen doPostBack Parameter abfragen kann oder ist das im Code Behind nicht möglich. Ich könnte mir vorstellen mit Request.Form oder etwas ähnlichem aber wie?

      Gruß

      1. Hallo,

        Javascript, Confirm-Box ... da gab es doch neulich schon Threads hier
        im Forum zu?!

        Wann sollte denn das Javascript "IF(expression) { ... }" ausgelöst werden?

        [ ] beim Laden der Seite? Dann rufe doch deine public Methoden direkt
            im Page_Load Event Callback auf

        [ ] Klick/Aktion auf irgendeinem Control deiner ASPX Seite? Dann erzeuge
            einen Subscriber (Event Callback) für das entsprechende Event auf
            jenem Control ... und du wirst sehen, dass ASP.net selbsttätig
            ein bisschen Javascript für den Client produziert (der imho auch
            ein doPostBack beinhaltet)

        Ein doPostback (für Event Reaktionen) wird als Argumente sehr oft die
        typischen Event-Argumente (object sender, System.EventArgs e) an den
        Server zurücksenden.

        Schau dir am besten einfach mal ein Beispiel einer fertig-gerenderten
        und ausgelieferten ASPX Seite an und untersuche mit welchen Argumenten
        ein doPostBack ausgeführt wird. Vergleiche dies dann mit den registrierten
        Events deines ASPX Quellcodes und ziehe deine Schlüsse. :)

        Grüße, Frank

        1. Hi!

          Javascript, Confirm-Box ... da gab es doch neulich schon Threads hier
          im Forum zu?!

          Wann sollte denn das Javascript "IF(expression) { ... }" ausgelöst werden?

          Es soll das Ergebnis der confirm box sein. Also nach dem Klicken auf OK oder Abbrechen.

          Gruß

          1. Und wann (und warum) soll die Confirm-Box gezeigt werden?

            Und was genau sollen deine beiden methoden machen, zumindest die eine
            die ausgelöst werden soll, wenn der Benutzer auf "Cancel" geklickt hat?

            Und wie fügst du das Javascript momentan ein?

            Und wie sieht denn das gerenderte HTML aus, wenn du es mal ohne deine
            Confirm-Box betreibst?

            Ciao, Frank