Aufruf der ASP.NET-Funktion aus JavaScript?

  • Ich schreibe eine Webseite in ASP.NET. Ich habe etwas JavaScript-Code und eine Schaltfläche zum Senden mit einem Klickereignis.

    Kann ich eine Methode aufrufen, die ich in ASP mit dem Klickereignis von JavaScript erstellt habe?

    09 December 2016
    Peter Mortensen
20 answers
  • Wenn Sie es nicht mit Ajax oder auf andere Weise tun möchten und nur ein normales ASP.NET-Postback ausführen möchten, können Sie Folgendes tun (ohne andere Bibliotheken zu verwenden):

    Es ist zwar ein bisschen schwierig ...:)

    i. Fügen Sie Ihrer Page-Klasse in Ihrer Codedatei (vorausgesetzt Sie verwenden C # und .NET 2.0 oder höher) der folgenden Klasse hinzu, damit sie wie folgt aussieht:

     public partial class Default : System.Web.UI.Page, IPostBackEventHandler{}
     

    ii. Dies sollte (mit Tab - Tab ) diese Funktion zu Ihrer Codedatei hinzufügen:

     public void RaisePostBackEvent(string eventArgument) { }
     

    iii. Schreiben Sie in Ihrem Onclick-Ereignis in JavaScript den folgenden Code:

     var pageId = '<%=  Page.ClientID %>';
    __doPostBack(pageId, argumentString);
     

    Dadurch wird die Methode 'RaisePostBackEvent' in aufgerufen Ihre Codedatei mit dem 'eventArgument' als 'argumentString', den Sie vom JavaScript übergeben haben. Jetzt können Sie ein beliebiges anderes Ereignis anrufen.

    PS: Das ist 'Underscore-Underscore-DoPostBack' ... Und es sollte kein Platz in dieser Reihenfolge sein. Irgendwie erlaubt mir die WMD nicht, in Unterstriche zu schreiben, gefolgt von einem Zeichen!

    09 December 2016
    Peter Mortensen
  • Die Methode __doPostBack() funktioniert gut.

    Eine andere (sehr hackige) Lösung besteht einfach darin, eine unsichtbare ASP-Schaltfläche in Ihr Markup einzufügen und mit einem JavaScript darauf zu klicken method.

     <div style="display: none;">
       <asp:Button runat="server" ... OnClick="ButtonClickHandlerMethod" />
    </div>
     

    Rufen Sie in Ihrem JavaScript den Verweis auf die Schaltfläche mit der ClientID und rufen Sie dann die Methode .click () auf.

     var button = document.getElementById(/* button client id */);
    
    button.click();
     
    09 December 2016
    Peter Mortensen
  • Die Microsoft AJAX-Bibliothek erledigt dies. Sie können auch eine eigene Lösung erstellen, bei der Sie mit AJAX Ihre eigenen Aspx-Skriptdateien (als grundlegende Skriptdateien) zum Ausführen von .NET-Funktionen aufrufen.

    Ich schlage die Microsoft AJAX-Bibliothek vor. Einmal installiert und referenziert, fügen Sie einfach eine Zeile in Ihre Seitenlade oder in init ein:

     Ajax.Utility.RegisterTypeForAjax(GetType(YOURPAGECLASSNAME))
     

    Dann können Sie das tun Dinge wie:

     <Ajax.AjaxMethod()> _
    Public Function Get5() AS Integer
        Return 5
    End Function
     

    Dann können Sie es auf Ihrer Seite wie folgt aufrufen:

     PageClassName.Get5(javascriptCallbackFunction);
     

    Der letzte Parameter Ihres Funktionsaufrufs muss die Javascript-Rückruffunktion sein, die ausgeführt wird, wenn die AJAX-Anforderung zurückgegeben wird.

    17 February 2011
    EndangeredMassa
  • Sie können dies asynchron mit .NET Ajax PageMethods durchführen. Siehe hier oder hier .

    09 December 2016
    Peter Mortensen
  • Statische, stark typisierte Programmierung fühlte sich für mich immer sehr natürlich an, so dass ich mich zunächst weigerte, JavaScript zu lernen (ganz zu schweigen von HTML und CSS), als ich webbasierte Frontends für meine Anwendungen erstellen musste. Ich würde alles tun, um dieses Problem umzugehen, z. B. das Umleiten auf eine Seite, um nur das OnLoad-Ereignis auszuführen und Aktionen auszuführen, solange ich reines C # codieren könnte Wenn Sie mit Websites arbeiten, müssen Sie aufgeschlossener sein und mehr auf das Internet ausgerichtet denken (dh, versuchen Sie nicht, clientseitige Dinge auf dem Server zu erledigen und umgekehrt). Ich liebe ASP.NET-Webformulare und verwende sie immer noch (sowie MVC ), aber Wenn ich versuche, die Dinge einfacher zu machen und die Trennung von Client und Server zu verbergen, kann dies Neuankömmlinge verwirren und letztendlich die Dinge schwieriger machen.

    Mein Rat ist es Lernen Sie ein paar grundlegende JavaScript-Funktionen (wie Sie Ereignisse registrieren, DOM-Objekte abrufen, CSS bearbeiten usw.), und Sie werden die Web-Programmierung viel angenehmer finden (ganz zu schweigen davon). Viele Leute haben verschiedene Ajax-Bibliotheken erwähnt, aber ich habe keine echten Ajax-Beispiele gesehen, also hier. (Wenn Sie mit Ajax nicht vertraut sind, müssen Sie lediglich eine asynchrone HTTP-Anforderung zum Aktualisieren von Inhalten erstellen (oder möglicherweise eine serverseitige Aktion in Ihrem Szenario ausführen), ohne die gesamte Seite neu zu laden oder ein vollständiges Postback durchzuführen.

    Client-Seite:

     <script type="text/javascript">
    var xmlhttp = new XMLHttpRequest(); // Create object that will make the request
    xmlhttp.open("GET", "http://example.org/api/service", "true"); // configure object (method, URL, async)
    xmlhttp.send(); // Send request
    
    xmlhttp.onstatereadychange = function() { // Register a function to run when the state changes, if the request has finished and the stats code is 200 (OK). Write result to <p>
        if (xmlhttp.readyState == 4 && xmlhttp.statsCode == 200) {
              document.getElementById("resultText").innerHTML = xmlhttp.responseText;
        }
    };
    </script>
     

    Das ist it. Obwohl der Name irreführend sein kann, kann das Ergebnis auch in Klartext oder JSON vorliegen, aber Sie sind nicht auf XML beschränkt. jQuery bietet eine noch einfachere Schnittstelle zum Ausführen von Ajax-Aufrufen (unter anderem zur Vereinfachung anderer JavaScript-Tasks).

    Die Anforderung kann ein HTTP-POST oder HTTP-GET sein und muss nicht auf einer Webseite sein, aber Sie können bei jedem Dienst posten, auf den zugehört wird

    22 February 2018
    DezDespertar
  • Dies wird von der Microsoft AJAX-Bibliothek ausgeführt. Sie können auch eine eigene Lösung erstellen, bei der Sie mithilfe von AJAX Ihre eigenen Aspx-Skriptdateien (als grundlegende Skriptdateien) aufrufen, um .NET-Funktionen auszuführen.

    Dies ist Die Bibliothek mit dem Namen AjaxPro war ein MVP mit dem Namen Michael Schwarz . Diese Bibliothek wurde nicht von Microsoft geschrieben.

    Ich habe AjaxPro ausgiebig verwendet, und es ist eine sehr schöne Bibliothek, die ich für einfache Rückrufe an den Server empfehlen würde. Es funktioniert gut mit der Microsoft-Version von Ajax ohne Probleme. Ich möchte jedoch anmerken, wie einfach Microsoft Ajax gemacht hat, ich würde es nur verwenden, wenn es wirklich notwendig ist. Es ist eine Menge JavaScript erforderlich, um einige wirklich komplizierte Funktionen auszuführen, die Sie von Microsoft erhalten, indem Sie sie einfach in ein Update-Fenster ziehen.

    09 December 2016
    Peter Mortensen
  • Ich denke, Blogbeitrag Abrufen von & amp; SQL Server-Datenbankdaten in ASP.NET-Seite mit Ajax (jQuery) anzeigen hilft Ihnen dabei.

    JavaScript-Code

    [&&1&&~

    ASP.NET Serverseitenfunktion

     [WebMethod]
    [ScriptMethod(ResponseFormat= ResponseFormat.Json)]
    public static List<TopCompany> GetCompanies()
    {
        System.Threading.Thread.Sleep(5000);
        List<TopCompany> allCompany = new List<TopCompany>();
        using (MyDatabaseEntities dc = new MyDatabaseEntities())
        {
            allCompany = dc.TopCompanies.ToList();
        }
        return allCompany;
    }
     
    09 December 2016
    Peter Mortensen
  • Es ist für beide Szenarien (dh synchron / asynchron) so einfach, wenn Sie einen serverseitigen Ereignishandler auslösen möchten, beispielsweise das Click-Ereignis von Button.

    Zum Auslösen eines Event-Handlers eines Steuerelements: Wenn Sie bereits einen ScriptManager auf Ihrer Seite hinzugefügt haben, überspringen Sie Schritt 1.

    1. Fügen Sie in Ihrem Seitenclient-Skriptabschnitt Folgendes hinzu:

       //<![CDATA[
      var theForm = document.forms['form1'];
      if (!theForm) {
          theForm = document.form1;
      }
      function __doPostBack(eventTarget, eventArgument) {
          if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
              theForm.__EVENTTARGET.value = eventTarget;
              theForm.__EVENTARGUMENT.value = eventArgument;
              theForm.submit();
          }
      }
      //]]>
       
      1. Schreiben Sie Ihren serverseitigen Ereignishandler für Ihr Steuerelement

        geschütztes void btnSayHello_Click (Objektsender, EventArgs e) { Label1.Text = "Hello World. .. "; }

      2. Fügen Sie eine Clientfunktion hinzu, um die serverseitige Event-Handler-Funktion

        aufzurufen SayHello () { __doPostBack ("btnSayHello", ""); }

    Ersetzen Sie "btnSayHello" im obigen Code durch die Client-ID Ihres Steuerelements.

    Wenn sich Ihr Steuerelement in einem Aktualisierungsfenster befindet, wird die Seite nicht angezeigt Aktualisierung. Das ist so einfach.

    Eine andere Sache ist zu sagen: Seien Sie vorsichtig mit der Client-ID, da dies von Ihrer ID-Generierungsrichtlinie abhängt, die in der ClientIDMode-Eigenschaft definiert ist.

    09 December 2016
    Peter Mortensen
  • Wenn die __doPostBack-Funktion auf der Seite nicht generiert wird, müssen Sie ein Steuerelement einfügen, um es wie folgt zu erzwingen:

    >
    27 August 2010
    Riga
  • Möglicherweise möchten Sie einen Webdienst für Ihre üblichen Methoden erstellen.
    Fügen Sie einfach ein WebMethodAttribute zu den Funktionen hinzu, die Sie aufrufen möchten, und das ist es.
    Wenn Sie einen Webservice mit all Ihren üblichen Dingen haben, ist das System auch einfacher zu warten.

    11 August 2008
    Lars Mæhlum