[Hinweis: Dieser Absatz hat nichts mit dem Titelinhalt zu tun und kann übersprungen werden] Nachdem ich zwei Episoden von Stargate gesehen und geduscht hatte, beschloss ich schließlich, mit dem Schreiben dieses Artikels zu beginnen. Dies ist mein erster wirklich origineller technischer Artikel. Unabhängig vom technischen Inhalt habe ich diesen Schritt endlich gewagt. Tatsächlich habe ich viele Blogs eröffnet, vom ersten Campus-Bus bis zum Blog Park und meinem Sina-Blog, um mich zu beschweren. Tatsächlich bestand der ursprüngliche Zweck des Blogs darin, meinen Lernprozess beim Schreiben von Programmen aufzuzeichnen. Aber später hat es sich zu etwas entwickelt, das ich als Folge meiner Unfähigkeit, mich auf das Lernen zu konzentrieren, ansehen kann. Wie das Sprichwort sagt, ist es jedoch noch nicht zu spät, das Problem zu beheben fokussierter und fokussierter. Geleitet von diesem konzentrierten Gedanken habe ich vor kurzem endlich wieder angefangen, Programme richtig zu schreiben. Diesmal habe ich die Dinge, die ich nicht tun wollte, wirklich niedergelegt und mich darauf konzentriert, den C#-Code zu schreiben, den ich mag Meine Favoriten sind C# und Javascript. Um genau zu sein, ich habe mich erst kürzlich in sie verliebt. Ich dachte ursprünglich, sie sei genau wie die Basic-Sprache, die ich als Kind gespielt habe, aber sie hat sich geändert Es sieht so aus, als ob es sich nicht um eine Skriptsprache wie VBS handelt, aber unter dem Erscheinungsbild der C-Sprache verbirgt sich tatsächlich ein weiterer Artikel, um es zu beschreiben Ich mag die .NET-Plattform, ich weiß nicht, warum ich sie 2001 zum ersten Mal zum Schreiben von Code verwendet habe, aber dann habe ich mich aufgrund von Umweltproblemen in sie verliebt Damals wurde es für eine Weile bis 2004 unterbrochen. Ich habe es wieder aufgenommen, aber mehr als ein Jahr lang habe ich nur Stapel von Steuerelementen gezogen und sie dann im Eigenschaftenfenster angepasst. Es schien, als hätte ich vergessen, was Das Web sah ursprünglich so aus, und dann gibt es endlich etwas, das meine Erinnerungen verändert hat: Ajax.
Tatsächlich wurden bei der Veröffentlichung von ASP.NET 2.0 einige ähnliche Inhalte in einigen Datensteuerelementen wie GridView im Januar 2005 integriert „ASP.NET“ (Chinesische Version | Englisch) hat mir den Charme asynchroner Aufrufe in asp.net bewusst gemacht (die Implementierungsmethode ist auf die Beta1-Version beschränkt, über die Skript-Rückrufteile Beta1, Beta2 und die offizielle Version Sie unterscheiden sich von Zeit zu Zeit Wer Interesse hat, kann sich die kürzlich veröffentlichten MSDN-Inhalte ansehen, aber ich habe damals nur Atlas verwendet, also habe ich ihm nicht viel Aufmerksamkeit geschenkt Ich habe vor einiger Zeit mit mir über ASP gesprochen und erwähnt, dass die Implementierung von Atlas zu umständlich ist und dass er nur ein paar sehr kleine Inhalte implementieren möchte, die nicht so mühsam sein müssen Ich kenne mich mit dem Ajax-Framework von .NET nicht aus, ich erinnere mich natürlich an den integrierten Skript-Rückrufmechanismus. Nachdem wir das Projekt eines Freundes verwendet hatten, haben wir viel Code darüber geschrieben Ich habe plötzlich ein Problem entdeckt, das heißt, der Code war zu chaotisch. Jede Seite ist ähnlich und es kann nur ein String-Parameter übergeben werden. Zusätzlich zur Interaktion müssen wir Inline-Frames verwenden, um einige teure Daten anzuzeigen. Vor zwei Tagen ging ich nach Haiti und kaufte ein Buch „Ajax Advanced Language Programming“. Nachdem ich einen Teil davon gelesen hatte, wollte ich plötzlich verstehen, wie man den Skriptrückruf in asp.net 2.0 implementiert. Tatsächlich wurden viele Stellen im Artikel „Benutzerdefinierter Skriptrückruf in ASP.NET“ im Rückblick sehr klar erklärt. Man kann sagen, dass sich damals viele Dinge in der Cloud befanden und die Benutzer nur die Auswirkungen sehen konnten Ich werde zuerst die meiner Meinung nach einfachste Implementierung veröffentlichen und sie dann analysieren.
Erstellen Sie eine neue Default.aspx-Seite, fügen Sie ein CheckBox-Steuerelement auf der Seite hinzu und öffnen Sie dann die Datei Default.aspx.cs. Die _Default-Klasse fügt drei geerbte Schnittstellen hinzu: ICallbackContainer, ICallbackEventHandler und INamingContainer:
[Code 1]
#region ICallbackContainer-Mitglied
öffentliche Zeichenfolge GetCallbackScript(IButtonControl buttonControl, Zeichenfolgenargument)
{
throw new Exception("Die Methode oder Operation ist nicht implementiert.");
}
#endregion
#region ICallbackEventHandler-Mitglieder
string temp;
öffentlicher String GetCallbackResult()
{
//neue Ausnahme auslösen("Beispielfehler");
Rücklauftemperatur;
}
public void RaiseCallbackEvent(string eventArgument)
{
temp = "_____" + eventArgument + " ist erfolgreich._____";
}
#endregion
Gehen Sie zur Page_Load-Methode der Seite Default.aspx.cs und fügen Sie den folgenden Code hinzu:
[Code 2]
protected void Page_Load(object sender, EventArgs e)
{
string temp = Page.ClientScript.GetCallbackEventReference(this, "arg", "Callback", "context", "OnError", true);
string script = "function CallServer(arg,context){" + temp + "}";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "abc", script, true);
CheckBox1.Attributes.Add("onclick", "CallServer('I call Server ','context');");
}
Nachdem Sie den CS-Code bearbeitet haben, öffnen Sie die Datei Default.aspx und fügen Sie den folgenden Code zwischen <head>...</head> ein:
[Code 3]
<script type="text/javascript">
Funktion OnError(err,context)
{
alarm(err);
}
Funktion Callback(arg,context)
{
alarm(arg);
}
</script>
Das CheckBox-Steuerelement kann hier bei Bedarf aufgerufen und geändert werden. Bei Verwendung des Button-Steuerelements sollten Sie jedoch darauf achten, dass das OnSubmit-Ereignis standardmäßig aktiviert wird. Daher müssen Sie es möglicherweise einrichten oder verwenden HTML-Steuerung direkt. Der obige Code kann als minimale Implementierung des Skriptrückrufs betrachtet werden und ist alle erforderlich.
Steuerelemente, die grundlegende Rückrufe verwenden, müssen drei Schnittstellen implementieren: ICallbackContainer, INamingContainer und ICallbackEventHandler. Tatsächlich verfügt INamingContainer über keinen zu implementierenden Schnittstelleninhalt. Er „identifiziert lediglich das Containersteuerelement, das einen neuen ID-Namespace innerhalb der Steuerhierarchie des Seitenobjekts erstellt“ (zitiert nach MSDN). Was die ICallbackContainer-Schnittstelle betrifft, ist die Erklärung in MSDN (chinesische Version) relativ vage. Da wir hier Seiten als Grundlage für Rückrufe verwenden, verwenden wir diese Methode nicht Die von der Schnittstelle implementierte Methode ist GetCallbackScript. Wenn Sie jedoch Ihr eigenes Ajax-Steuerelement kapseln, ist diese Methode sehr nützlich. Hier verwenden wir nur die von ICallbackEventHandler implementierte Methode, um Daten zu verarbeiten, da ich in der Page_Load-Methode eine CallServer-Methode registriert habe Wird durch das an die CheckBox angehängte OnClick-Ereignis ausgelöst, damit wir einen klareren Aufrufprozess verstehen können.
Später [Code 3] habe ich zwei Javascript-Methoden implementiert, eine dient zur Behandlung von Aufruffehlern und die andere zur Verarbeitung der Rückgabeinformationen nach erfolgreichem Aufruf. In [Code 1] gibt es einen Code, der eine von mir auskommentierte Ausnahme auslöst. Mit diesem Code kann ich den Aufruf der OnError-Methode simulieren.
Bis hierher haben wir gesehen, wie dieser Aufruf implementiert wird. Um es ganz klar auszudrücken: Dies ist eigentlich eine relativ fortgeschrittene Methode zum Ziehen von Steuerelementen, aber wie wird sie implementiert? Warum sehe ich nichts über XmlHttpRequest? (Ich bin fest davon überzeugt, dass dies der beste Weg ist, Ajax zu implementieren, da dieser Code in jedem Browser verwendet werden kann, der Javascript unterstützt. Ich denke, das hat nichts mit der Geheimtür zu tun.)
Kompilieren, ausführen......
Wenn Sie auf der laufenden Seite auf das Kontrollkästchen klicken, wird „___I call Server is success.___“ angezeigt. Wie wird das ausgeführt? Klicken Sie auf dieser Seite einfach auf „Quellcode anzeigen“. Auf der Seite werden drei Skriptblöcke automatisch generiert ist die CallSerer-Methode, die wir gerade mit ClientScript registriert haben, und es gibt auch einen Link-Tag für ein externes Skript. Dies ist der Schlüssel, zu dem es eine Verbindung herstellt.
<script src="/TechTest/WebResource.axd?d=DE9YrizlDDq8OUlo_3rQgA2&t=632919546726295408" type="text/javascript"></script>
Öffnen Sie die Adresse entsprechend der im SRC oben angegebenen Adresse, und Sie können eine erhalten Datei WebResource.axd (Geben Sie die Verbindungsadresse in ein Download-Tool wie Thunder ein und Sie können sie herunterladen. Wenn Sie sie öffnen, können Sie sehen, dass diese Datei tatsächlich Javascript-Code enthält:
Versuchen Sie es
{
xmlRequest = new XMLHttpRequest();
}
fangen(e)
{
versuchen
{
xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
fangen(e)
{
}
}
Der Code kommt mir so bekannt vor!
if (!useAsync)
{
if (__synchronousCallBackIndex != -1)
{
__pendingCallbacks[__synchronousCallBackIndex] = null;
}
__synchronousCallBackIndex = callbackIndex;
}
Darin drin? Behandelt dies nicht die asynchrone Aufrufoption in der Page.ClientScript.GetCallbackEventReference-Methode?
Es sind viele nützliche Codes darin, die ich erforsche.
Es gibt noch viele weitere Methoden Offen gesagt handelt es sich um ein sehr einfaches Ajax-Framework. Die Kapselung des Frameworks umfasst die Verarbeitung von Steuerereignissen und die Verarbeitung von Postback-Anfragen. Auf dieser Basis können wir andere Kapselungen vornehmen, sodass es als Komponente von direkt in ein einfaches .NET-Ajax-Steuerelement gekapselt werden kann. NET während der Entwicklung.
Tatsächlich handelt es sich bei der Java-, .NET- oder PHP-Technologie um eine fortschrittliche Kapselung von HTTP auf der Serverseite, genau wie die CGI-Technologie, die wir vor langer Zeit verwendet haben, und jetzt ist die Technologie des Webs fortschrittlicher und verständlicher Mit dem internen Betriebsmechanismus von .NET können wir uns von einigen Einschränkungen lösen und einige Seiten neu schreiben oder uns selbst steuern, um unsere eigene Ajax-Entwicklungsumgebung zu erstellen.
Ich war früher Steuerungsingenieur und denke, dass die Kapselung im Zeitalter großer Fabriken eine notwendige Technologie ist. Allerdings müssen Programmierer immer noch tiefer in die Materie eintauchen und den Inhalt hinter der Funktionsweise des Programms wirklich verstehen, damit sie besser entwickeln können Produkte.