Der Client-Rückruf von Asp.Net2.0 ist eine sehr spannende Methode. Damit können wir steuern, welche Daten an den Server übermittelt werden, ohne die gesamte Seite zu übermitteln. Gleichzeitig gibt der Server nur die von Ihnen benötigten Daten zurück . Ganze Seite.
Zunächst müssen wir über eine sehr wichtige Methode sprechen: GetCallbackEventRefernce. Bitte weisen Sie darauf hin.
GetCallbackEventReference implementiert zunächst die RaiseCallbackEvent-Methode, die es dem Client-Skript ermöglicht, Parameter an den Server zu übergeben, und gibt dann den Wert der RaiseCallBackEvent-Methode an einen Parameter zurück, den Sie in der GetCallbackEventRefernce-Methode registriert haben (eigentlich handelt es sich auch um ein Skript, das Sie auf dem Client schreiben möchten). ). Um GetCallbackEventRefernce aufzurufen, müssen Sie ihm zwei Parameter aus dem Client-Skript übergeben, einer ist der Wert, der an das RaiseCallbackEvent-Ereignis übergeben werden soll, und der andere ist der Kontext.
Die Bedeutung seiner Parameter ist wie folgt:
Erstens: die Seite oder der Server, die das steuern implementiert die ICallbackEventHandler-Schnittstelle. Schreiben Sie dies, um die vorherige Seite darzustellen.
Der zweite: stellt den Wert dar, den Sie vom Client an die RaiseCallbackEvent-Methode übergeben möchten.
Der dritte: eine js-Funktion, die Sie auf den Client schreiben möchten. Gleichzeitig übergibt der Server die berechneten Daten an diese Funktion Diese Funktionsparameter.
Viertens: Ich weiß nicht genau, was Kontext bedeutet. Der Code, den GetCallbackEventRefernce an den Client sendet, lautet wie folgt:
WebForm_DoCallback('__Page',arg,ReceiveServerData,context,null,false)
Was sollten wir also tun, um die Anfrage zu erhalten? der Kunde? Wie rufe ich ihn an? Ich habe drei Methoden gesehen:
Die erste: Schreiben Sie eine öffentliche Zeichenfolge im Hintergrund und weisen Sie sie in Page_Load zu: =Page.ClientScript.GetCallbackEventReference(this, "message", "ShowServerTime", "context"); Achten Sie darauf, dass es sich um Page handelt .ClientScrip, da es einen ClientScriptManager zurückgibt, der alle Client-Skripte verwaltet. Erstellen Sie dann im Onclick-Ereignis einer Schaltfläche im Vordergrund <%=diese öffentliche Hintergrundzeichenfolge%> einen kleinen experimentellen Code wie folgt:
Frontend ServerTime.aspx: Entfernen Sie der Einfachheit halber viel nutzloses HTML
<%@ page language=". C#" CodeFile="ServerTime.aspx.cs" Inherits="ServerTime_aspx" %>
<html>
<Kopf>
<Titel>Serverzeit</Titel>
<script language="javascript">
Funktion GetServerTime()
{
var message = '';
var context = '';
<%=sCallBackFunctionInvocation%>
}
function ShowServerTime(timeMessage, context) {
Alert('Die aktuelle Zeit auf dem Server ist:n' + timeMessage);
}
</script>
</Kopf>
<Körper>
<form id="MainForm" runat="server">
<input type="button" value="Serverzeit abrufen" onclick="GetServerTime();" />
</form>
</Körper>
</html>
Backend:
using System;
unter Verwendung von System.Web.UI;
öffentliche Teilklasse ServerTime_aspx: Page,ICallbackEventHandler
{
//Achten Sie darauf, den ICallbackEventHandler zu implementieren. public string sCallBackFunctionInvocation;
void Page_Load(object sender, System.EventArgs e)
{
sCallBackFunctionInvocation = Page.ClientScript.GetCallbackEventReference(this, "message", "ShowServerTime", "context");
}
öffentlicher String RaiseCallbackEvent(string eventArgument)
{
return DateTime.Now.ToString();
}
}
Ausführen, klicken Sie auf die Schaltfläche und das Ergebnis ist wie folgt:
Zweite Methode: Bei der obigen Methode müssen wir den Hintergrund an den Vordergrund binden. Was ist, wenn wir ihn nicht binden? Wir machen Folgendes:
Verwenden Sie GetCallbackEventReference direkt als Implementierungsinhalt in der JS-Funktion und registrieren Sie diese JS-Funktion dann beim Client.
Front-End-TestPage-Code:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestPage.aspx.cs" Inherits="TestPage" %>
<html>
<Kopf>
<Titel>Unbenannte Seite</Titel>
<script type="text/javascript">
Funktionstest()
{
var lb = document.getElementById("Select1");
//Das zu verwendende Dropdown-Feld var con = lb.options[lb.selectedIndex].text;
//Den Text des von Ihnen ausgewählten Dropdown-Felds abrufen und dann CallTheServer aufrufen, eine vom Server ausgegebene JS-Funktion CallTheServer(con,'');
}
functionReceiveServerData(rValue)
{
Results.innerHTML = rValue;
}
</script>
</Kopf>
<Körper>
<form id="form1" runat="server">
<div>
<select id="Select1">
<option value=1 selected="selected">Mouse Disciple</option>
<Optionswert=2>Meister Wu Qiwa</Option>
</wählen>
<br />
<br />
<input onclick="test()" value="Den Dropdown-Box-Text vom Server zurückgeben" type=button>
<br />
<br />
<span ID="Ergebnisse"></span>
<br />
</div>
</form>
</Körper>
</html>
Backend-Code:
using System;
Verwenden von System.Data;
Verwenden von System.Configuration;
Verwenden von System.Collections;
mit System.Web;
mit System.Web.Security;
mit System.Web.UI;
mit System.Web.UI.WebControls;
mit System.Web.UI.WebControls.WebParts;
mit System.Web.UI.HtmlControls;
öffentliche Teilklasse TestPage: System.Web.UI.Page,System.Web.UI.ICallbackEventHandler
{
protected void Page_Load(object sender, EventArgs e)
{
String cbReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context");
String-CallbackScript;
callbackScript = "function CallTheServer(arg,context)" +"{ " + cbReference + "} ;";
Page.ClientScript.RegisterStartupScript(this.GetType(),"abcdefg",callbackScript, true);
//Der vierte Parameter gibt an, ob das Tag <script type="text/javascript"></script> automatisch zum Skript hinzugefügt werden soll, natürlich muss es hinzugefügt werden}
public String RaiseCallbackEvent(String eventArgument)
{
return „Was Sie ausgewählt haben ist“ + eventArgument;
}
}
Das Folgende ist das Ausführungsergebnis:
Der dritte Typ: Die ersten beiden sind HTML-Steuerelemente mit <input type="button". Was ist also, wenn es sich um eine Serverschaltfläche handelt? Natürlich können Sie auch das Onclick-Attribut des Server-Buttons im Hintergrund hinzufügen.
Front-End-Third.aspx-Code:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Third.aspx.cs" Inherits="Third" %>
<html>
<Kopf>
<Titel>Unbenannte Seite</Titel>
</Kopf>
<Körper>
<form id="form1" runat="server">
<div>
<select id="Select1">
<option selected="selected" value=1>Mouse Disciple</option>
<Optionswert=2>Meister Wu Qiwa</Option>
</wählen>
<asp:Button ID="Button1" runat="server" Text="Dies ist eine Serverschaltfläche" /></div>
<div id="div1" />
<script type="text/javascript">
FunktionRe(ret)
{
document.getElementById("div1").innerHTML = ret;
alarm(ret);
}
</script>
</form>
</Körper>
</html>
Code dahinter:
Verwenden des Systems;
Verwenden von System.Data;
Verwenden von System.Configuration;
Verwenden von System.Collections;
mit System.Web;
mit System.Web.Security;
mit System.Web.UI;
mit System.Web.UI.WebControls;
mit System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
öffentliche Teilklasse dritter: System.Web.UI.Page,System.Web.UI.ICallbackEventHandler
{
protected void Page_Load(object sender, EventArgs e)
{
//Der vierte Parameter ist null, da Sie ihm in js keine Parameter mehr übergeben können string str = Page.ClientScript.GetCallbackEventReference(this,"document.getElementById('Select1')._
Optionen[document.getElementById('Select1').selectedIndex].text","Re",null);
//return false soll verhindern, dass das Formular gesendet wird. Button1.Attributes.Add("onclick",str+";return false;");
}
#region ICallbackEventHandler-Mitglieder
öffentlicher String RaiseCallbackEvent(string eventArgument)
{
if (eventArgument == "Mauslehrling")
{
return „Mauslehrling: Das Leben ist wie eine Maus. Wenn du nicht in der Scheune bist, bist du auf der Toilette!“;
}
anders
{
zurück „Meister Wu Qiwa: selbstbewusst, selbstständig, optimistisch“;
}
}
#endregion
}
Kleiner Tipp: Nachdem Sie System.Web.UI.ICallbackEventHandler geschrieben haben, bewegen Sie die Maus nach oben, und vor System wird ein kleines Diagramm angezeigt. Klicken Sie darauf, um den RaiseCallbackEvent-Code automatisch zu schreiben.
Der Dritte fühlt sich am schlimmsten!