Ich schreibe eine Webseite in ASP.NET. Ich habe JavaScript-Code und eine Schaltfläche zum Senden mit einem Klickereignis.
Ist es möglich, eine Methode aufzurufen, die ich in ASP mit dem Klickereignis von JavaScript erstellt habe?
javascript
c#
asp.net
onclick
MattSayar
quelle
quelle
Antworten:
Wenn Sie dies nicht mit Ajax oder auf andere Weise tun möchten und nur ein normales ASP.NET-Postback durchführen möchten, gehen Sie wie folgt vor (ohne andere Bibliotheken zu verwenden):
Es ist allerdings etwas knifflig ... :)
ich. Fügen Sie in Ihrer Codedatei (vorausgesetzt, Sie verwenden C # und .NET 2.0 oder höher) die folgende Schnittstelle zu Ihrer Page-Klasse hinzu, damit sie so aussieht
ii. Dies sollte (mit Tab- Tab) diese Funktion zu Ihrer Codedatei hinzufügen :
iii. Schreiben Sie in Ihrem Onclick-Ereignis in JavaScript den folgenden Code:
Dadurch wird die Methode 'RaisePostBackEvent' in Ihrer Codedatei mit dem 'eventArgument' als 'argumentString' aufgerufen, den Sie vom JavaScript übergeben haben. Jetzt können Sie jedes andere Ereignis aufrufen, das Sie mögen.
PS: Das ist 'Unterstrich-Unterstrich-doPostBack' ... Und in dieser Sequenz sollte kein Leerzeichen sein ... Irgendwie erlaubt mir die Massenvernichtungswaffe nicht, Unterstriche gefolgt von einem Zeichen zu schreiben!
quelle
window.onbeforeunload = confirmExit; //debugger; function confirmExit() { var pageId = '<%= Page.ClientID %>'; var argumentString = 'ReleaseLock'; __doPostBack(pageId, argumentString); }
onkeyup
Event zum Laufen bringen. VerstandenJavaScript runtime error: '__doPostBack' is undefined
. Ich verwende C # und ASP.NET 2.0.Die
__doPostBack()
Methode funktioniert gut.Eine andere Lösung (sehr hackisch) besteht darin, einfach eine unsichtbare ASP-Schaltfläche in Ihr Markup einzufügen und mit einer JavaScript-Methode darauf zu klicken.
Rufen Sie in Ihrem JavaScript den Verweis auf die Schaltfläche mit seiner ClientID ab und rufen Sie dann .click () auf. Methode auf.
quelle
Die Microsoft AJAX-Bibliothek wird dies erreichen. Sie können auch eine eigene Lösung erstellen, bei der AJAX zum Aufrufen Ihrer eigenen Aspx-Skriptdateien (im Grunde genommen) zum Ausführen von .NET-Funktionen verwendet wird.
Ich schlage die Microsoft AJAX-Bibliothek vor. Nach der Installation und Referenzierung fügen Sie einfach eine Zeile in Ihre Seite ein oder laden:
Dann können Sie Dinge tun wie:
Dann können Sie es auf Ihrer Seite wie folgt aufrufen:
Der letzte Parameter Ihres Funktionsaufrufs muss die Javascript-Rückruffunktion sein, die ausgeführt wird, wenn die AJAX-Anforderung zurückgegeben wird.
quelle
Sie können dies asynchron mit .NET Ajax PageMethods tun. Sehen Sie hier oder hier .
quelle
Ich denke, Blog-Beitrag Wie Sie SQL Server-Datenbankdaten auf einer ASP.NET-Seite mit Ajax (jQuery) abrufen und anzeigen, wird Ihnen helfen.
JavaScript-Code
Serverseitige ASP.NET-Funktion
quelle
Statische, stark typisierte Programmierung hat sich für mich immer sehr natürlich angefühlt. Deshalb habe ich mich zunächst geweigert, JavaScript (ganz zu schweigen von HTML und CSS) zu lernen, als ich webbasierte Frontends für meine Anwendungen erstellen musste. Ich würde alles tun, um dies zu umgehen, wie auf eine Seite umzuleiten, nur um das OnLoad-Ereignis auszuführen und zu bearbeiten, solange ich reines C # codieren kann.
Sie werden jedoch feststellen, dass Sie, wenn Sie mit Websites arbeiten möchten, offen sein und anfangen müssen, weborientierter zu denken (das heißt, versuchen Sie nicht, clientseitige Dinge auf dem Server zu tun und umgekehrt). . Ich liebe ASP.NET-Webformulare und verwende sie immer noch (ebenso wie MVC ), aber ich werde sagen, dass der Versuch, die Dinge einfacher zu machen und die Trennung von Client und Server zu verbergen, Neulinge verwirren und die Dinge manchmal sogar schwieriger machen kann .
Mein Rat ist, etwas grundlegendes JavaScript zu lernen (wie man Ereignisse registriert, DOM-Objekte abruft, CSS manipuliert usw.), und Sie werden feststellen, dass die Webprogrammierung viel angenehmer ist (ganz zu schweigen von der einfacheren). Viele Leute haben verschiedene Ajax-Bibliotheken erwähnt, aber ich habe keine tatsächlichen Ajax-Beispiele gesehen. (Wenn Sie mit Ajax nicht vertraut sind, müssen Sie lediglich eine asynchrone HTTP-Anforderung zum Aktualisieren von Inhalten stellen (oder in Ihrem Szenario möglicherweise eine serverseitige Aktion ausführen), ohne die gesamte Seite neu zu laden oder ein vollständiges Postback durchzuführen.
Client-Seite:
Das ist es. Obwohl der Name irreführend sein kann, kann das Ergebnis auch im Klartext oder in JSON vorliegen. Sie sind jedoch nicht auf XML beschränkt. jQuery bietet eine noch einfachere Oberfläche für Ajax-Aufrufe (neben der Vereinfachung anderer JavaScript-Aufgaben).
Die Anforderung kann ein HTTP-POST oder HTTP-GET sein und muss sich nicht auf einer Webseite befinden. Sie können sie jedoch an jeden Dienst senden, der auf HTTP-Anforderungen wartet, z. B. eine RESTful- API. Mit der ASP.NET MVC 4-Web-API ist das Einrichten des serverseitigen Webdiensts zur Bearbeitung der Anforderung ebenfalls ein Kinderspiel. Viele Menschen wissen jedoch nicht, dass Sie dem Webformularprojekt auch API-Controller hinzufügen und diese verwenden können, um solche Ajax-Aufrufe zu verarbeiten.
Serverseitig:
Global.asax
Registrieren Sie dann einfach die HTTP-Route in Ihrer Global.asax-Datei, damit ASP.NET weiß, wie die Anforderung geleitet wird.
Mit AJAX und Controllern können Sie jederzeit asynchron auf den Server zurücksenden, um einen serverseitigen Vorgang auszuführen. Dieser Doppelschlag bietet sowohl die Flexibilität von JavaScript als auch die Leistung von C # / ASP.NET und bietet den Besuchern Ihrer Website ein besseres Gesamterlebnis. Ohne etwas zu opfern, bekommen Sie das Beste aus beiden Welten.
Verweise
quelle
Dies ist die Bibliothek namens AjaxPro, für die ein MVP namens Michael Schwarz geschrieben wurde . 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 darauf hinweisen, dass Microsoft Ajax so einfach gemacht hat, dass ich es nur verwenden würde, wenn es wirklich notwendig ist. Es erfordert viel JavaScript, um einige wirklich komplizierte Funktionen auszuführen, die Sie von Microsoft erhalten, indem Sie sie einfach in ein Update-Panel einfügen.
quelle
Für beide Szenarien (dh synchron / asynchron) ist es so einfach, wenn Sie einen serverseitigen Ereignishandler auslösen möchten, z. B. das Klickereignis von Button.
So lösen Sie einen Ereignishandler eines Steuerelements aus: Wenn Sie Ihrer Seite bereits einen ScriptManager hinzugefügt haben, überspringen Sie Schritt 1.
Fügen Sie Folgendes in den Abschnitt Ihres Seitenclient-Skripts ein
Schreiben Sie Ihren serverseitigen Ereignishandler für Ihre Steuerung
protected void btnSayHello_Click (Objektabsender, EventArgs e) {Label1.Text = "Hallo Welt ..."; }}
Fügen Sie eine Clientfunktion hinzu, um den serverseitigen Ereignishandler aufzurufen
Funktion SayHello () {__doPostBack ("btnSayHello", ""); }}
Ersetzen Sie das "btnSayHello" im obigen Code durch die Client-ID Ihres Steuerelements.
Wenn sich Ihr Steuerelement in einem Update-Bereich befindet, wird die Seite auf diese Weise nicht aktualisiert. Das ist so einfach.
Eine andere Sache zu sagen ist: Seien Sie vorsichtig mit der Client-ID, da dies von Ihrer ID-Generierungsrichtlinie abhängt, die mit der ClientIDMode-Eigenschaft definiert wurde.
quelle
Wenn jemand wie Merk ist und Probleme damit hat, habe ich eine Lösung:
Wenn Sie ein Benutzersteuerelement haben, müssen Sie anscheinend auch den PostBackEventHandler auf der übergeordneten Seite erstellen. Anschließend können Sie den PostBackEventHandler des Benutzersteuerelements aufrufen, indem Sie ihn direkt aufrufen. Siehe unten:
Wobei UserControlID die ID ist, die Sie dem Benutzer auf der übergeordneten Seite gegeben haben, als Sie sie im Markup verschachtelt haben.
Hinweis: Sie können auch einfach Methoden, die zu diesem Benutzersteuerelement gehören, direkt aufrufen (in diesem Fall benötigen Sie nur den RaisePostBackEvent-Handler auf der übergeordneten Seite):
quelle
Möglicherweise möchten Sie einen Webdienst für Ihre gängigen Methoden erstellen.
Fügen Sie einfach ein WebMethodAttribute über den Funktionen hinzu, die Sie aufrufen möchten, und fertig.
Ein Webdienst mit all Ihren allgemeinen Dingen erleichtert auch die Wartung des Systems.
quelle
Wenn die Funktion __doPostBack auf der Seite nicht generiert wird, müssen Sie ein Steuerelement einfügen, um dies wie folgt zu erzwingen:
quelle
Hinsichtlich:
Es sollte so sein:
Dabei ist formID die ASP.NET-Steuerelement-ID in der ASPX-Datei.
quelle
Fügen Sie diese Zeile zum Laden der Seite hinzu, wenn der erwartete Objektfehler angezeigt wird.
quelle
Sie können verwenden,
PageMethods.Your C# method Name
um auf C # -Methoden oder VB.NET-Methoden in JavaScript zuzugreifen.quelle
Versuche dies:
Oder dieses
Verwenden Sie die OnClientClick-Eigenschaft der Schaltfläche, um JavaScript-Funktionen aufzurufen ...
quelle
Sie können es auch erhalten, indem Sie diese Zeile in Ihren JavaScript-Code einfügen:
Ich denke, das ist sehr einfach!
quelle
Bitte versuchen Sie dies:
ddlVoucherType ist ein Steuerelement, das von der ausgewählten Indexänderung aufgerufen wird ... Und Sie können der ausgewählten Indexänderung dieses Steuerelements eine beliebige Funktion zuweisen.
quelle
Der einfachste und beste Weg, dies zu erreichen, ist die Verwendung des
onmouseup()
JavaScript-Ereignisses anstelle vononclick()
Auf diese Weise wird JavaScript nach dem Klicken ausgelöst und das ASP-
OnClick()
Ereignis wird nicht beeinträchtigt .quelle
Ich versuche dies und könnte so eine Asp.Net-Methode ausführen, während ich jQuery verwende.
Führen Sie eine Seitenumleitung in Ihrem jQuery-Code durch
Verwenden Sie dann beim Laden der Seite eine Abfragezeichenfolge
Sie müssen also keinen zusätzlichen Code ausführen
quelle
Diese Antwort funktioniert für mich wie ein Kinderspiel, dank Cross-Browser:
Eine andere Lösung (sehr hackisch) besteht darin, einfach eine unsichtbare ASP-Schaltfläche in Ihr Markup einzufügen und mit einer JavaScript-Methode darauf zu klicken.
Rufen Sie in Ihrem JavaScript den Verweis auf die Schaltfläche mit seiner ClientID ab und rufen Sie die Methode .Click () auf:
quelle