Der von der AJAX-Technologie befürwortete aktualisierungsfreie Rückruf erfordert das Schreiben einer großen Menge JavaScript-Code oder die Verwendung einiger AJAX-Frameworks in der Originaltechnologie, was die Entwicklungseffizienz und Wartbarkeit erheblich verringert. Tatsächlich bietet ASP.NET2.0 bereits eine solche Schnittstelle, nämlich ICallbackEventHandler.
Es gibt bereits viele Artikel zu ICallbackEventHandler im Internet, und dieser Artikel trägt wirklich mehr zur Geschichte bei.
ICallbackEventHandler existiert in System.Web.UI. Probieren wir es anhand eines sehr einfachen Beispiels aus.
Der erste Schritt besteht darin, ein neues WEB-Fenster in VS2005 zu erstellen.
Der zweite Schritt besteht darin, einen Teil des HTML-Codes (unten) in ASPX einzufügen:
1<Körper>
2 <form id="form1" runat="server">
3 <div>
4 <button onclick="CallServer()">CallServer</button>
5 </div>
6 </form>
7</body>
Der dritte Schritt besteht darin, ein JavaScript-Skript in <HEAD></HEAD> einzufügen:
1 <script type="text/javascript">
2 Funktion CallServer()
3 {
4 var Produkt = „Test“;
5 <%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
6}
7
8 FunktionReceiveServerData(rValue)
9 {
10 Alert(rValue);
11 }
12 </script>
Der vierte Schritt besteht darin, die ICallbackEventHandler-Schnittstelle im Hintergrund-CS-Code von ASPX zu erben und die beiden Methoden in der Schnittstelle zu implementieren:
ICallbackEventHandler.GetCallbackResult()
Und
ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
Der fünfte Schritt besteht darin, eine Variable CallBackValue hinzuzufügen und die beiden Methoden der Schnittstelle wie folgt zu ändern:
1 privater String CallBackValue = string.Empty;
2
3 String ICallbackEventHandler.GetCallbackResult()
4 {
5 return CallBackValue + „,ok“;
6}
7
8 void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
9 {
10 this.CallBackValue = eventArgument;
11 }
12
Der sechste Schritt besteht darin, eine Schaltfläche auf der Benutzeroberfläche anzuzeigen. Nach dem Klicken wird die Zeichenfolge „Test“ an den Hintergrund gesendet. Der C#-Code fügt „, OK“ zur Zeichenfolge hinzu und gibt sie an das JavaScript zurück Code eingeben und anzeigen.
Durch Befolgen der oben genannten sechs Schritte können Sie einen aktualisierungsfreien Rückruf erreichen. Lassen Sie uns nun einige Codeteile analysieren.
Schauen wir uns zunächst den JavaScript-Code im dritten Schritt an. Es gibt einen Rückruf in der CallServer()-Methode.
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
Der zweite der vier Parameter gibt an, dass die String-Variable im Produkt-JavaScript an den Hintergrund zurückgegeben wird, und der dritte Parameter gibt die JavaScript-Methode „ReceiveServerData(string Value)“ an, die die Rückgabeinformationen empfängt, wenn sie aus dem Hintergrund zurückkehrt.
Im fünften Schritt gibt es zwei Methoden im Hintergrund. Eine, ICallbackEventHandler.RaiseCallbackEvent(string eventArgument), wird verwendet, um die im Vordergrund-JavaScript übergebene String-Variable zu empfangen und sie der internen Variablen this.CallBackValue zuzuweisen. ICallbackEventHandler.GetCallbackResult() ändert die interne Variable this.CallBackValue und gibt sie an die Vordergrund-JavaScript-Methode ReceiveServerData(string Value) zurück.
Die Aufrufsequenz ist: (frontend)CallServer() --> (backend)ICallbackEventHandler.RaiseCallbackEvent(string eventArgument) --> (backend)ICallbackEventHandler.GetCallbackResult() --> (frontend)ReceiveServerData(string Value).
Der gesamte Anrufvorgang ist sehr einfach und der wichtigste Schritt ist der dritte Schritt
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
Zu dieser Methode finden Sie im Folgenden einige Informationen im Internet, die Sie sich ansehen können.
GetCallbackEventReference bewirkt, dass die Client-Methode am Ende der Client-Anfrage wiederverwendet wird. Außerdem kann der CallBackManager bestimmen, welche Rückrufmethode generiert werden soll. Die in diesem Beispiel verwendete überladene Methode ist:
public string GetCallbackEventReference(
String-Ziel, String-Argument,
string clientCallback, string context,
Zeichenfolge clientErrorCallback)
Tabelle 1. Parameterbeschreibungen für die GetCallBackEventReference-Methode.
Parameter Beschreibung Ziel-ID der Seite, auf der der Rückrufaufruf verarbeitet wird. Weitere Informationen finden Sie im nächsten unmittelbaren Abschnitt. In unserem Beispiel ist „this“ der Argumentwert, da der Rückruf auf derselben Seite verarbeitet wird ist die Parameterdefinition, die zum Senden des Werts an den Server verwendet wird. Dieser Wert wird vom Parameter „eventArgument“ auf der Serverseite mithilfe des RaiseCallbackEvent-Ereignisses empfangen. „Arg“ wird zum ersten Parameternamen in unserem Beispiel. Der Wert wird über dieses Argument übergeben Der ClientCallback-Methodenname, der nach erfolgreichem Serveraufruf aufgerufen wird, ist der Methodenname, der den Callback-Kontext verarbeitet. Er sollte normalerweise verwendet werden Identifizieren Sie den Kontext des Aufrufs. Sie werden dies anhand der Beispielimplementierung besser verstehen. Im Beispiel wird „ctx“ nur eine weitere Parameterdefinition verwendet. Der Wert hierfür wird vom Client übergeben CallBackManager im Fehlerfall.
Die von dieser Methode zurückgegebene Zeichenfolge lautet:
__doCallback('__Page',arg,CallBackHandler,ctx, ErrorCallBack)
Eine weitere überladene Methode ist:
public string GetCallbackEventReference(
Steuerelement, Zeichenfolgenargument,
string clientCallback, string context)
öffentliche Zeichenfolge GetCallbackEventReference(
Steuerelement, Zeichenfolgenargument,
string clientCallback, string context,
Zeichenfolge clientErrorCallback)