Le rappel sans actualisation préconisé par la technologie AJAX nécessite l'écriture d'une grande quantité de code JavaScript ou l'utilisation de certains frameworks AJAX dans la technologie d'origine, ce qui réduit considérablement l'efficacité du développement et la maintenabilité. En fait, ASP.NET2.0 fournit déjà une telle interface, ICallbackEventHandler.
Il existe déjà de nombreux articles sur ICallbackEventHandler sur Internet, et cet article ajoute vraiment plus à l'histoire.
ICallbackEventHandler existe dans System.Web.UI Essayons-le avec un exemple très simple.
La première étape consiste à créer une nouvelle fenêtre WEB dans VS2005.
La deuxième étape consiste à mettre un morceau de code HTML (ci-dessous) dans ASPX :
1<corps>
2 <form id="form1" runat="serveur">
3 <div>
4 <button onclick="CallServer()">CallServer</button>
5 </div>
6 </form>
7</body>
La troisième étape consiste à mettre un script JavaScript dans <HEAD></HEAD> :
1 <script type="text/javascript">
2 fonctions CallServer()
3 {
4 var produit = "test" ;
5 <%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
6}
7
8 fonctionReceiveServerData(rValue)
9 {
10 alerte (rValue);
11 }
12 </script>
La quatrième étape consiste à hériter de l'interface ICallbackEventHandler dans le code CS d'arrière-plan d'ASPX et à implémenter les deux méthodes dans l'interface :
ICallbackEventHandler.GetCallbackResult()
et
ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
La cinquième étape consiste à ajouter une variable CallBackValue et à modifier les deux méthodes de l'interface comme :
1 chaîne privée CallBackValue = string.Empty;
2
3 chaînes ICallbackEventHandler.GetCallbackResult()
4 {
5 return CallBackValue + ",ok";
6}
7
8 void ICallbackEventHandler.RaiseCallbackEvent (string eventArgument)
9 {
10 this.CallBackValue = eventArgument;
11 }
12
La sixième étape consiste à exécuter. Un bouton apparaîtra sur l'interface. Après avoir cliqué, la chaîne "Test" sera transmise en arrière-plan. Le code C# d'arrière-plan ajoutera ", OK" à la chaîne et la renverra au JavaScript du client. coder et l'afficher.
En suivant les six étapes ci-dessus, vous pouvez obtenir un rappel sans actualisation. Analysons maintenant quelques morceaux de code.
Examinons d'abord le code JavaScript dans la troisième étape. Il y a un rappel dans la méthode CallServer(). L'instruction de rappel est :
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
Le deuxième paramètre parmi les quatre paramètres spécifie que la variable de chaîne dans le JavaScript du produit est renvoyée en arrière-plan, et le troisième paramètre spécifie la méthode JavaScript ReceiverServerData(string Value) qui reçoit les informations de retour lors du retour depuis l'arrière-plan.
Dans la cinquième étape, il existe deux méthodes en arrière-plan. L'une, ICallbackEventHandler.RaiseCallbackEvent(string eventArgument), est utilisée pour recevoir la variable de chaîne passée au premier plan JavaScript et l'attribuer à la variable interne this.CallBackValue. ICallbackEventHandler.GetCallbackResult() modifiera la variable interne this.CallBackValue qui est renvoyée à la méthode JavaScript de premier plan ReceiverServerData (string Value).
La séquence d'appel est : (frontend)CallServer() --> (backend)ICallbackEventHandler.RaiseCallbackEvent(string eventArgument) --> (backend)ICallbackEventHandler.GetCallbackResult() --> (frontend)ReceiveServerData(string Value).
L'ensemble du processus d'appel est très simple et l'étape la plus critique est la troisième étape.
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
Pour cette méthode, voici une information trouvée sur Internet, vous pouvez y jeter un œil.
GetCallbackEventReference provoque le recyclage de la méthode client à la fin de la requête client. Il permet également au CallBackManager de déterminer quelle méthode de rappel générer. La méthode surchargée utilisée dans cet exemple est :
public string GetCallbackEventReference(
cible de chaîne, argument de chaîne,
chaîne clientCallback, contexte de chaîne,
chaîne clientErrorCallback)
Tableau 1. Descriptions des paramètres de la méthode GetCallBackEventReference.
Paramètres Description ID cible de la page où l'invocation de rappel est gérée. Pour en savoir plus, consultez les autres options surchargées disponibles dans la section suivante. Dans notre exemple, "this" est la valeur de l'argument, puisque le rappel est géré dans la même page. est la définition du paramètre utilisée pour envoyer la valeur au serveur. Cette valeur est reçue par le paramètre "eventArgument" du côté du serveur à l'aide de l'événement RaiseCallbackEvent. "arg" devient le premier nom de paramètre dans notre exemple. La valeur est transmise via cet argument. le client. clientCallback Nom de la méthode de rappel invoquée après un appel réussi au serveur. "CallBackHandler" est le nom de la méthode qui gère le contexte. Un paramètre associé à "l'argument" du client. identifiez le contexte de l'appel. Vous comprendrez mieux cela à partir de l'exemple d'implémentation. Dans l'exemple, "ctx" est juste une autre définition de paramètre utilisée. La valeur pour cela est transmise par le clientErrorCallback. CallBackManager en cas d'erreurs.
La chaîne renvoyée par cette méthode est :
__doCallback('__Page',arg,CallBackHandler,ctx, ErrorCallBack)
Une autre méthode surchargée est :
public string GetCallbackEventReference(
Contrôle contrôle, argument de chaîne,
chaîne clientCallback, contexte de chaîne)
chaîne publique GetCallbackEventReference(
Contrôle contrôle, argument de chaîne,
chaîne clientCallback, contexte de chaîne,
chaîne clientErrorCallback)