Le rappel client d'Asp.Net2.0 est une méthode très intéressante. Elle nous permet de contrôler les données à soumettre au serveur sans soumettre la page entière. En même temps, le serveur renvoie uniquement les données dont vous avez besoin sans les renvoyer. .page entière.
Tout d'abord, nous devons parler d'une méthode très importante : GetCallbackEventRefernce. J'ai noté ma compréhension. Veuillez le signaler. Merci beaucoup !
GetCallbackEventReference implémente d'abord la méthode RaiseCallbackEvent qui permet au script client de transmettre des paramètres au serveur, puis renvoie la valeur de la méthode RaiseCallBackEvent à un paramètre que vous avez enregistré dans la méthode GetCallbackEventRefernce (en fait, c'est aussi un script que vous souhaitez écrire sur le client ). Pour appeler GetCallbackEventRefernce, vous devez lui transmettre deux paramètres à partir du script client, l'un est la valeur à transmettre à l'événement RaiseCallbackEvent et l'autre est le contexte.
La signification de ses paramètres est la suivante :
Premièrement : la page ou le serveur qui contrôle. implémente l'interface ICallbackEventHandler, écrivez ceci pour représenter la page précédente.
Le deuxième : représente la valeur que vous souhaitez transmettre du client à la méthode RaiseCallbackEvent du serveur.
Le troisième : une fonction js que vous souhaitez écrire sur le client. En même temps, le serveur transmettra également les données calculées à cette fonction. ces paramètres de fonction.
Quatrièmement : je ne sais pas exactement ce que signifie le contexte. Le code que GetCallbackEventRefernce envoie au client est le suivant :
WebForm_DoCallback('__Page',arg,ReceiveServerData,context,null,false)
Alors, que devons-nous faire pour obtenir la demande de le client ? Comment l'appeler ? J'ai vu trois méthodes :
La première : écrire une chaîne publique en arrière-plan et l'attribuer dans Page_Load : =Page.ClientScript.GetCallbackEventReference(this, "message", "ShowServerTime", "context"); .ClientScrip, car il renverra un ClientScriptManager, qui gère tous les scripts clients. Ensuite, dans l'événement onclick d'un bouton au premier plan <%=that public background string%> Créez un petit code expérimental comme suit :
Frontend ServerTime.aspx : Pour plus de commodité, supprimez beaucoup de code HTML inutile
<%@ page language=". C#" CodeFile="ServerTime.aspx.cs" Inherits="ServerTime_aspx" %>
<html>
<tête>
<titre>Heure du serveur</titre>
<script langage="javascript">
fonction GetServerTime()
{
varmessage = '';
var contexte = '';
<%=sCallBackFunctionInvocation%>
}
fonction ShowServerTime (timeMessage, contexte) {
alert('L'heure actuelle sur le serveur est :n' + timeMessage);
}
</script>
</tête>
<corps>
<form id="MainForm" runat="serveur">
<input type="button" value="Obtenir l'heure du serveur" onclick="GetServerTime();"
</formulaire>
</corps>
</html>
Backend :
utilisation du système ;
en utilisant System.Web.UI ;
classe partielle publique ServerTime_aspx : Page, ICallbackEventHandler
{
//Assurez-vous d'implémenter l'excuse ICallbackEventHandler public string sCallBackFunctionInvocation;
void Page_Load(object sender, System.EventArgs e)
{
sCallBackFunctionInvocation = Page.ClientScript.GetCallbackEventReference(this, "message", "ShowServerTime", "context");
}
chaîne publique RaiseCallbackEvent (string eventArgument)
{
return DateTime.Now.ToString();
}
}
Exécutez, cliquez sur le bouton et le résultat est le suivant :
Deuxième méthode : Dans la méthode ci-dessus, nous devons lier l’arrière-plan au premier plan, et si nous ne le lions pas ? Nous faisons ceci :
utilisons directement GetCallbackEventReference comme contenu d'implémentation dans la fonction js, puis enregistrez cette fonction js auprès du client.
Code TestPage frontal :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestPage.aspx.cs" Inherits="TestPage" %>
<html>
<tête>
<titre>Page sans titre</titre>
<script type="text/javascript">
test de fonction()
{
var lb = document.getElementById("Select1");
//La liste déroulante à prendre var con = lb.options[lb.selectedIndex].text;
//Récupérez le texte de la liste déroulante que vous avez sélectionnée, puis appelez CallTheServer, qui est une fonction js générée par le serveur CallTheServer(con,'');
}
fonctionReceiveServerData(rValue)
{
Résultats.innerHTML = rValue ;
}
</script>
</tête>
<corps>
<form id="form1" runat="serveur">
<div>
<select id="Sélectionner1">
<valeur d'option=1 sélectionné="sélectionné">Disciple de la souris</option>
<valeur de l'option=2>Maître Wu Qiwa</option>
</sélectionner>
<br />
<br />
<input onclick="test()" value="Renvoyer le texte de la liste déroulante depuis le serveur" type=bouton>
<br />
<br />
<span ID="Résultats"></span>
<br />
</div>
</formulaire>
</corps>
</html>
Code backend :
utilisation du système ;
en utilisant System.Data ;
en utilisant System.Configuration ;
en utilisant System.Collections ;
en utilisant System.Web ;
en utilisant System.Web.Security ;
en utilisant System.Web.UI ;
en utilisant System.Web.UI.WebControls ;
en utilisant System.Web.UI.WebControls.WebParts ;
en utilisant System.Web.UI.HtmlControls ;
classe partielle publique TestPage : System.Web.UI.Page,System.Web.UI.ICallbackEventHandler
{
protected void Page_Load (expéditeur de l'objet, EventArgs e)
{
String cbReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context");
CallbackScript de chaîne ;
callbackScript = "function CallTheServer(arg,context)" +"{ " + cbReference + "} ;";
Page.ClientScript.RegisterStartupScript(this.GetType(),"abcdefg",callbackScript, true);
//Le quatrième paramètre représente s'il faut ajouter automatiquement la balise <script type="text/javascript"></script> au script, bien sûr elle doit être ajoutée}
chaîne publique RaiseCallbackEvent (String eventArgument)
{
return "Ce que vous avez sélectionné est" + eventArgument ;
}
}
Voici le résultat de l'exécution :
Le troisième type : les deux premiers sont des contrôles HTML avec <input type="button", et s'il s'agit d'un bouton de serveur ? Bien entendu, vous pouvez également ajouter l'attribut onclick du bouton du serveur en arrière-plan.
Code tiers.aspx frontal :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="third.aspx.cs" Inherits="third" %>
<html>
<tête>
<titre>Page sans titre</titre>
</tête>
<corps>
<form id="form1" runat="serveur">
<div>
<select id="Sélectionner1">
<option sélectionnée="selected" value=1>Disciple de la souris</option>
<valeur de l'option=2>Maître Wu Qiwa</option>
</sélectionner>
<asp:Button ID="Button1" runat="server" Text="Ceci est un bouton de serveur" /></div>
<identifiant div="div1" />
<script type="text/javascript">
fonctionRe(ret)
{
document.getElementById("div1").innerHTML = ret;
alerte(ret);
}
</script>
</formulaire>
</corps>
</html>
Code derrière :
utiliser le système ;
en utilisant System.Data ;
en utilisant System.Configuration ;
en utilisant System.Collections ;
en utilisant System.Web ;
en utilisant System.Web.Security ;
en utilisant System.Web.UI ;
en utilisant System.Web.UI.WebControls ;
en utilisant System.Web.UI.WebControls.WebParts ;
en utilisant System.Web.UI.HtmlControls ;
troisième classe partielle publique : System.Web.UI.Page,System.Web.UI.ICallbackEventHandler
{
protected void Page_Load (expéditeur de l'objet, EventArgs e)
{
//Le quatrième paramètre est nul, car vous ne pouvez plus lui transmettre de paramètres dans la chaîne js str = Page.ClientScript.GetCallbackEventReference(this,"document.getElementById('Select1')._
options[document.getElementById('Select1').selectedIndex].text","Re",null);
//return false sert à empêcher la soumission du formulaire Button1.Attributes.Add("onclick",str+";return false;");
}
#region Membres ICallbackEventHandler
chaîne publique RaiseCallbackEvent (chaîne eventArgument)
{
if (eventArgument == "Apprenti souris")
{
return "Apprenti souris : La vie est comme une souris. Si vous n'êtes pas dans la grange, vous êtes dans les toilettes !";
}
autre
{
revenir « Maître Wu Qiwa : confiant, autonome, optimiste » ;
}
}
#endregion
}
Petit conseil, après avoir fini d'écrire System.Web.UI.ICallbackEventHandler, déplacez la souris vers le haut, et il y aura un petit graphique devant System. Cliquez dessus pour écrire automatiquement le code RaiseCallbackEvent.
Le troisième ressent le pire !