[Catatan: Paragraf ini tidak ada sangkut pautnya dengan isi judul dan dapat dilewati] Setelah menonton dua episode Stargate dan mandi, akhirnya saya memutuskan untuk mulai menulis artikel ini. Ini adalah artikel teknis pertama saya yang benar-benar orisinal. Terlepas dari konten teknisnya, saya akhirnya mengambil langkah ini. Sebenarnya saya sudah membuka banyak blog, dari bus kampus paling awal, hingga Blog Park, dan blog Sina saya untuk mengeluh. Namun kemudian berkembang menjadi sesuatu yang biasa dikeluhkan. Hal ini bisa dikatakan sebagai akibat dari ketidakmampuan saya untuk berkonsentrasi belajar. Namun, seperti kata pepatah, belum terlambat untuk memperbaiki masalah tersebut lebih fokus dan lebih fokus. Dipandu oleh pemikiran terfokus ini, saya akhirnya mulai menulis program dengan benar lagi akhir-akhir ini. Kali ini saya benar-benar meletakkan hal-hal yang tidak ingin saya lakukan, dan berkonsentrasi menulis kode C# yang saya suka favoritnya adalah C# dan Javascript. Yang terakhir adalah bahasa scripting. Tepatnya, saya baru jatuh cinta padanya baru-baru ini. Awalnya saya mengira itu seperti Basic yang saya mainkan ketika saya masih kecil, kecil dan sederhana, tapi ternyata ternyata tidak seperti ini. Sepertinya, walaupun ini juga merupakan bahasa scripting seperti VBS, sebenarnya ada lebih banyak konten yang tersembunyi di bawah tampilan bahasa C. Saya mungkin akan menulis artikel lain untuk menjelaskannya Saya menyukainya. Platform .NET, saya tidak tahu mengapa ketika saya pertama kali menggunakan bahasa C# untuk menulis kode pada tahun 2001, saya menganggapnya sangat indah, dan kemudian saya jatuh cinta padanya waktu itu sempat terputus beberapa saat hingga tahun 2004. , saya mengambilnya lagi, tetapi selama lebih dari setahun, saya hanya menarik tumpukan kontrol, lalu menyesuaikannya di panel properti Web awalnya terlihat seperti itu, dan akhirnya Ada sesuatu yang mengubah ingatanku---- Ajax.
Kerangka pengembangan Ajax ada di mana-mana. Faktanya, ketika ASP.NET 2.0 dirilis, beberapa konten serupa diintegrasikan secara internal. Ini digunakan di beberapa kontrol data seperti GridView ASP.NET" (versi Cina | Bahasa Inggris) membuat saya menyadari pesona panggilan asinkron di asp.net (metode implementasi terbatas pada versi beta1, tentang skrip panggilan balik bagian beta1, beta2 dan versi resmi Mereka berbeda dari waktu ke waktu ke waktu. Mereka yang tertarik dapat merujuk sendiri ke konten MSDN yang baru dirilis), tetapi saya hanya memainkannya saat itu, nanti saya menggunakan Atlas, jadi saya tidak terlalu memperhatikannya, kawan berdiskusi dengan saya tentang ASP beberapa waktu lalu. Saat mengimplementasikan ajax di .net, saya menyebutkan bahwa implementasi atlas terlalu rumit, dan yang ingin dia terapkan hanyalah beberapa konten yang sangat kecil yang tidak perlu terlalu merepotkan Saya tidak terbiasa dengan kerangka ajax .NET selain ini, tentu saja saya ingat mekanisme panggilan balik skrip bawaan. Menggunakan proyek teman (dengan persetujuannya sendiri), kami menulis banyak kode tentang ini , saya tiba-tiba menemukan masalah, yaitu kodenya terlalu berantakan. Setiap halaman serupa, dan hanya satu parameter string yang dapat diteruskan. Selain interaksi, kita harus menggunakan frame inline untuk menampilkan beberapa data mahal. Dua hari yang lalu saya pergi ke Haitu dan membeli buku "Ajax Advanced Language Programming". Setelah membaca sebagian, tiba-tiba saya ingin memahami bagaimana cara mengimplementasikan script callback di asp.net 2.0? Faktanya, melihat ke belakang sekarang, banyak tempat di artikel "Panggilan Balik Skrip Kustom di ASP.NET" telah dijelaskan dengan sangat jelas. Dapat dikatakan bahwa pada saat itu, banyak hal yang berada di awan, dan pengunjung hanya dapat melihat efeknya Saya akan memposting implementasi yang menurut saya paling sederhana terlebih dahulu, lalu menganalisisnya.
Buat halaman Default.aspx baru, tambahkan kontrol Kotak Centang pada halaman, lalu buka file Default.aspx.cs. Kelas _Default menambahkan tiga antarmuka bawaan, ICallbackContainer, ICallbackEventHandler dan INamingContainer:
[Kode 1]
#region anggota ICallbackContainer
string publik GetCallbackScript (IButtonControl buttonControl, argumen string)
{
throw new Exception("Metode atau operasi tidak diterapkan.");
}
#endregion
#region anggota ICallbackEventHandler
suhu string;
string publik GetCallbackResult()
{
//melemparkan Pengecualian baru("Contoh Kesalahan");
suhu kembali;
}
kekosongan publik RaiseCallbackEvent(string eventArgument)
{
temp = "_____" + eventArgument + " berhasil._____";
}
#wilayah akhir
Buka metode Page_Load pada halaman Default.aspx.cs dan tambahkan kode berikut:
[Kode 2]
dilindungi kekosongan Page_Load (pengirim objek, EventArgs e)
{
string temp = Page.ClientScript.GetCallbackEventReference(ini, "arg", "Callback", "context", "OnError", true);
string skrip = "fungsi CallServer(arg,konteks){" + suhu + "}";
Halaman.ClientScript.RegisterClientScriptBlock(ini.GetType(), "abc", skrip, benar);
CheckBox1.Attributes.Add("onclick", "CallServer('Saya memanggil Server ','context');");
}
Setelah mengedit kode CS, buka file Default.aspx dan tambahkan kode berikut di antara <head>...</head>:
[Kode 3]
<skrip tipe="teks/javascript">
fungsi OnError(err,konteks)
{
waspada(salah);
}
fungsi Panggilan Balik(arg,konteks)
{
peringatan(argumen);
}
</skrip>
Kontrol Kotak Centang di sini dapat ditarik dengan santai dan dapat diubah jika diperlukan. Namun, Anda mungkin ingin memperhatikan saat menggunakan kontrol Tombol. Ini akan mengaktifkan acara OnSubmit secara default, jadi Anda mungkin perlu mengaturnya atau menggunakan Kontrol HTML secara langsung. Kode di atas dapat dianggap sebagai implementasi minimal dari panggilan balik skrip, dan semuanya diperlukan.
Kontrol yang menggunakan callback dasar harus mengimplementasikan tiga antarmuka: ICallbackContainer, INamingContainer, dan ICallbackEventHandler. Faktanya, INamingContainer tidak memiliki konten antarmuka yang perlu diimplementasikan. Ini hanya "mengidentifikasi kontrol kontainer yang membuat namespace ID baru dalam hierarki kontrol objek Halaman" (dikutip dari MSDN). Sedangkan untuk antarmuka ICallbackContainer, penjelasan yang diberikan di MSDN (versi Cina) relatif tidak jelas. Beberapa artikel terkait juga memperkenalkan callback skrip dan antarmuka ICallbackEventHandler. Karena kami menggunakan halaman sebagai dasar untuk callback di sini, kami tidak menggunakan metode ini diimplementasikan oleh antarmuka adalah GetCallbackScript, tetapi jika Anda mengenkapsulasi kontrol Ajax Anda sendiri, metode ini sangat berguna. Di sini kita hanya menggunakan metode yang diterapkan oleh ICallbackEventHandler untuk memproses data, karena dalam metode Page_Load saya mendaftarkan metode CallServer, dan kemudian Dipicu pada event OnClick yang dilampirkan pada CheckBox, sehingga kita dapat memahami proses pemanggilan dengan lebih jelas.
Nanti [Kode 3] Saya menerapkan dua metode Javascript, satu digunakan untuk menangani kesalahan panggilan, dan yang lainnya digunakan untuk menangani informasi pengembalian setelah panggilan berhasil. Di [Kode 1], ada sepotong kode yang memunculkan pengecualian yang saya komentari. Melalui kode ini, saya dapat melakukan simulasi pemanggilan metode OnError.
Sampai di sini kita telah melihat bagaimana menerapkan panggilan ini. Terus terang, ini sebenarnya adalah cara yang relatif canggih untuk menyeret kontrol, tapi bagaimana cara menerapkannya? Mengapa saya tidak melihat apa pun tentang XmlHttpRequest? (Saya sangat yakin ini adalah cara terbaik untuk mengimplementasikan Ajax karena kode ini dapat digunakan di browser apa pun yang mendukung Javascript. Menurut saya ini tidak ada hubungannya dengan pintu rahasia)
Kompilasi, jalankan......
Mengklik kotak centang pada halaman berjalan akan menampilkan "___Saya memanggil Server berhasil.___". Bagaimana ini dijalankan? Sebenarnya, cukup klik "Lihat Kode Sumber" di halaman ini. Ada sedikit rahasia yang tersembunyi di sini. Tiga blok skrip dibuat secara otomatis di halaman tersebut. Salah satunya adalah __doPostback, yang digunakan untuk menangani postback peristiwa kontrol server adalah metode CallSerer yang baru saja kita daftarkan menggunakan ClientScript, dan ada juga tag tautan untuk skrip eksternal. Ini adalah kuncinya.
<script src="/TechTest/WebResource.axd?d=DE9YrizlDDq8OUlo_3rQgA2&t=632919546726295408" type="text/javascript"></script>
Buka alamat sesuai dengan alamat yang ditunjukkan oleh SRC di atas, dan Anda bisa mendapatkan File WebResource.axd (Isi alamat koneksi ke alat pengunduhan seperti Thunder dan Anda dapat mengunduhnya). Saat Anda membukanya, Anda dapat melihat bahwa file ini sebenarnya berisi beberapa kode Javascript:
coba
{
xmlRequest = XMLHttpRequest baru();
}
menangkap(e)
{
mencoba
{
xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
menangkap(e)
{
}
}
Kodenya terlihat sangat familiar!
jika (!useAsync)
{
jika (__synchronousCallBackIndex != -1)
{
__pendingCallbacks[__synchronousCallBackIndex] = null;
}
__synchronousCallBackIndex = callbackIndex;
}
Di dalam ini? Bukankah ini yang menangani opsi panggilan asinkron dalam metode Page.ClientScript.GetCallbackEventReference?
Ada banyak kode berguna di dalamnya. Saya sedang meneliti..................
Ada banyak metode selain itu terus terang, ini adalah Ajax yang sangat sederhana. Enkapsulasi kerangka kerja mencakup pemrosesan peristiwa kontrol dan pemrosesan permintaan postback. Kita dapat membuat enkapsulasi lain berdasarkan ini, sehingga dapat langsung dienkapsulasi menjadi kontrol .NET Ajax sederhana sebagai komponen. NET selama pengembangan.
Faktanya, teknologi Java, .NET atau PHP semuanya merupakan enkapsulasi HTTP yang canggih di sisi server, sama seperti teknologi CGI yang kita gunakan dahulu kala, dan sekarang teknologi Web lebih maju, dan pemahaman Ketika datang ke mekanisme operasi internal .NET, kita dapat melepaskan diri dari beberapa batasan dan menulis ulang beberapa halaman atau mengontrol diri kita sendiri untuk membangun lingkungan pengembangan Ajax kita sendiri.
Saya pernah menjadi seorang insinyur kontrol. Menurut saya enkapsulasi adalah teknologi yang diperlukan di era pabrik besar. Namun, programmer masih perlu menggali lebih dalam dan benar-benar memahami konten di balik pengoperasian program sehingga mereka dapat mengembangkan kualitas yang lebih baik. produk.