Der eigene Client-Rückruf von Asp.Net 2.0
Asp.Net 2.0 wurde veröffentlicht. 2.0 verfügt über viele neue Funktionen, und Client-Rückrufe sind eine davon. Client-Rückrufe ermöglichen es uns, serverseitige Methoden ohne Postbacks aufzurufen. Sie stimmen mit den von AJAX bereitgestellten Funktionen überein, sind jedoch nicht so flexibel wie AJAX, die aufrufenden Methoden können jedoch nicht angepasst werden. Um die Client-Rückruffunktion verwenden zu können, müssen Sie die Schnittstelle system.Web.UI.IcallbackEventHandler implementieren.
Diese Schnittstelle enthält zwei Methoden
// Diese Methode wird immer aufgerufen, wenn der Client zurückruft
public void RaiseCallbackEvent(String eventArgument)
//Diese Methode wird aufgerufen, nachdem RaiseCallbackEvent ausgeführt wurde. Der Rückgabewert dieser Methode wird an den Client zurückgesendet
öffentliche Zeichenfolge GetCallbackResult()
Beispiel:
.cs:
String cbReference = Page.ClientScript.GetCallbackEventReference(
this,"arg", "ReceiveServerData", "context");
String-CallbackScript;
callbackScript = "function CallServer(arg, context)" + "{ " + cbReference + "} ;";
Page.ClientScript.RegisterClientScriptBlock(
this.GetType(),"CallServer", callbackScript, true);
Javascript:
Einführung in AJAX
AJAX ist keine neue Technologie, sondern eine organische Kombination einiger bestehender Technologien, darunter: XmlHttp, Reflect. Ein AJAX-Framework umfasst im Wesentlichen: einen benutzerdefinierten HttpHandler und einen Teil des JavaScript-Codes.
AJAX-Betriebsmechanismus
Wenn wir in der Vergangenheit XmlHttp zum Implementieren einer nicht aktualisierten Seite verwendet haben, haben wir Folgendes verwendet. Der Unterschied besteht darin, dass der HttpHandler dieser Seite von uns selbst implementiert wird.
Erstellen Sie Ihr eigenes AJAX:
1. Zuerst müssen wir einen HTTP-Handler (HttpHandler) implementieren, um auf Client-Anfragen zu reagieren:
Um einen benutzerdefinierten HttpHandler zu implementieren, müssen Sie die IHttpHandler-Schnittstelle implementieren.
Die Schnittstelle enthält eine Eigenschaft und eine Methode:
bool IHttpHandler.IsReusable
void IHttpHandler.ProcessRequest(HttpContext context)
Beispiel:
bool IHttpHandler.IsReusable
{
get { return true }
}
void IHttpHandler.ProcessRequest(HttpContext context)
{
context.Response.Clear(); //Aufzurufende Methode abrufen
string methodName = context.Request.QueryString["me"];
//Assembly-Informationen abrufen.
//Czhenq.AJAX.Class1.Dencode ist eine benutzerdefinierte String-Kodierungsmethode
string AssemblyName = Czhenq.AJAX.Class1.Dencode(context.Request.QueryString["as"]);
//Methodenparameter abrufen
string Arguments = context.Request.QueryString["ar"]; //Aufruf der Methode starten
Typ type = Type.GetType(AssemblyName);
MethodInfo-Methode = type.GetMethod(methodName,
BindingFlags.NonPublic |. BindingFlags.Static |.
if (Methode != null)
{
//Parameter werden durch "," getrennt
string[] args = Arguments.Split(",".ToCharArray());
ParameterInfo[] paras = method.GetParameters();
object[] argument = new object[paras.Length];
for (int i = 0; i < argument.Length; i++)
{
if (i < args.Length) {
//Da alle von XmlHttp übergebenen Parameter vom Typ String sind, müssen sie konvertiert werden
//Hier konvertieren wir nur die Parameter in Int32, es werden keine weiteren Überlegungen angestellt.
argument[i] = Convert.ToInt32(args[i]);
}
}
Objektwert = method.Invoke(Activator.CreateInstance(type, true), argument);
if (value != null) context.Response.Write(value.ToString());
sonst context.Response.Write("error");
}
//Ende der Verarbeitung
context.Response.End();
Willkommen im .NET-Community-Forum und interagieren Sie mit 2 Millionen technischen Mitarbeitern >> Geben Sie
2. Client-Javascript-Code ein:
function CallMethod(AssemblyName,MethodName,Argus)
{
var args = "";
for(var i=0;i
args += Argus[i] + ",";
if(args.length>0) args = args.substr(0,args.length-1);
var xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
url = "AJAX/AJAX.czhenq?as=" + AssemblyName + "&me=" + Methodenname +"&ar="+ args;
xmlhttp.open("POST",url,false);
xmlhttp.send();
alarm(xmlhttp.responseText);
}
3. Ein einfaches AJAX-Framework wurde implementiert. Schreiben Sie nun einen Code zum Testen.
Verwenden Sie Ihr eigenes AJAX
1. Erstellen Sie eine neue Website und verwenden Sie den HttpHandler, den Sie gerade geschrieben haben. Und registrieren Sie Ihren HttpHandler in der Web.config der Website, um anzugeben, dass diese Anfragen mit dem von Ihnen geschriebenen Handler verarbeitet werden. Der folgende Inhalt erklärt: Alle Anfragen, die mit „czq“ enden, werden mit „Czhenq.HttpHandlerFactory“ verarbeitet.
type="Czhenq.HttpHandlerFactory, Czhenq.AJAX"/>
2. Fügen Sie eine Webseite hinzu, kopieren Sie das Skript gerade auf die Seite und fügen Sie eine Methode hinzu, die Sie aufrufen möchten.
privater String Add(int i, int j)
{
return TextBox1.Text;
}
3. Platzieren Sie ein HiddenField-Steuerelement auf der Seite und nennen Sie es AssemblyName. Und fügen Sie den folgenden Code in Page_Load hinzu:
stringassemblyName = Czhenq.AJAX.Class1.Encode(
typeof(_Default).AssemblyQualifiedName);
AssemblyName.Value = AssemblyName;
var AssemblyName = document.getElementById("AssemblyName"); var argus = new Array();argus.push("100");argus.push("200");CallMethod(assemblyName,"Add",argus)
Zusammenfassend lässt sich sagen, dass AJAX keine neue Technologie ist, sondern lediglich eine organische Kombination einiger bestehender Technologien. Wir können AJAX einfach als eine Kapselung von JavaScript verstehen, die XmlHttp aufruft.
Im Anhang finden Sie die Implementierung von Encode und Dencode:
öffentlicher statischer String Encode(String-Wert)
{
byte[] bytes = ASCIIEncoding.ASCII.GetBytes(value);
return Convert.ToBase64String(bytes);
}
öffentliche statische Zeichenfolge Dencode (Zeichenfolgenwert)
{
byte[] bytes = Convert.FromBase64String(value);
return ASCIIEncoding.ASCII.GetString(bytes);
}