Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
oleh Microsoft
Dalam ASP.NET 1.x, pengembang memiliki pilihan antara model kode sebaris dan model kode di belakang kode. Code-behind dapat diimplementasikan menggunakan atribut Src atau atribut CodeBehind dari @Page direktif. Dalam ASP.NET 2.0, pengembang masih memiliki pilihan antara kode sebaris dan kode di belakang, tetapi telah ada peningkatan yang signifikan pada model code-behind.
Dalam ASP.NET 1.x, pengembang memiliki pilihan antara model kode sebaris dan model kode di belakang kode. Code-behind dapat diimplementasikan menggunakan atribut Src atau atribut CodeBehind dari @Page direktif. Dalam ASP.NET 2.0, pengembang masih memiliki pilihan antara kode sebaris dan kode di belakang, tetapi telah ada peningkatan yang signifikan pada model code-behind.
Penyempurnaan dalam Model Code-Behind
Untuk sepenuhnya memahami perubahan dalam model code-behind di ASP.NET 2.0, yang terbaik untuk dengan cepat meninjau model seperti yang ada di ASP.NET 1.x.
Model Code-Behind di ASP.NET 1.x
Dalam ASP.NET 1.x, model code-behind terdiri dari file ASPX (Webform) dan file code-behind yang berisi kode pemrograman. Kedua file terhubung menggunakan direktif @Page dalam file ASPX. Setiap kontrol pada halaman ASPX memiliki deklarasi yang sesuai dalam file code-behind sebagai variabel instans. File code-behind juga berisi kode untuk pengikatan peristiwa dan kode yang dihasilkan yang diperlukan untuk perancang Visual Studio. Model ini bekerja cukup baik, tetapi karena setiap elemen ASP.NET di halaman ASPX memerlukan kode yang sesuai dalam file code-behind, tidak ada pemisahan kode dan konten yang sebenarnya. Misalnya, jika perancang menambahkan kontrol server baru ke file ASPX di luar Visual Studio IDE, aplikasi akan rusak karena tidak adanya deklarasi untuk kontrol tersebut dalam file code-behind.
Model Code-Behind di ASP.NET 2.0
ASP.NET 2.0 sangat meningkatkan model ini. Dalam ASP.NET 2.0, code-behind diimplementasikan menggunakan kelas parsial baru yang disediakan dalam ASP.NET 2.0. Kelas code-behind di ASP.NET 2.0 didefinisikan sebagai kelas parsial yang berarti bahwa kelas hanya berisi bagian dari definisi kelas. Bagian yang tersisa dari definisi kelas dihasilkan secara dinamis oleh ASP.NET 2.0 menggunakan halaman ASPX pada runtime atau ketika situs Web telah dikompilasi sebelumnya. Tautan antara file code-behind dan halaman ASPX masih dibuat menggunakan direktif @ Halaman. Namun, alih-alih atribut CodeBehind atau Src, ASP.NET 2.0 sekarang menggunakan atribut CodeFile. Atribut Warisan juga digunakan untuk menentukan nama kelas untuk halaman.
Direktif @ Halaman yang khas mungkin terlihat seperti ini:
<%@Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
Definisi kelas umum dalam file code-behind ASP.NET 2.0 mungkin terlihat seperti ini:
public partial class _Default : System.Web.UI.Page
Catatan
C# dan Visual Basic adalah satu-satunya bahasa terkelola yang saat ini mendukung kelas parsial. Oleh karena itu, pengembang yang menggunakan J# tidak akan dapat menggunakan model code-behind di ASP.NET 2.0.
Model baru meningkatkan model code-behind karena pengembang sekarang akan memiliki file kode yang hanya berisi kode yang telah mereka buat. Ini juga menyediakan pemisahan kode dan konten yang sebenarnya karena tidak ada deklarasi variabel instans dalam file code-behind.
Catatan
Karena kelas parsial untuk halaman ASPX adalah tempat pengikatan peristiwa berlangsung, pengembang Visual Basic dapat mewujudkan sedikit peningkatan performa dengan menggunakan kata kunci Handles di kode-belakang untuk mengikat peristiwa. C# tidak memiliki kata kunci yang setara.
Baru @ Atribut Arahan Halaman
ASP.NET 2.0 menambahkan banyak atribut baru ke arahan Halaman @ . Atribut berikut baru di ASP.NET 2.0.
Asinkron
Atribut Asinkron memungkinkan Anda mengonfigurasi halaman untuk dijalankan secara asinkron. Sampul halaman asinkron nanti dalam modul ini.
Batas Waktu Asinkron
Menentukan batas waktu untuk halaman asinkron. Defaultnya adalah 45 detik.
CodeFile
Atribut CodeFile adalah pengganti atribut CodeBehind di Visual Studio 2002/2003.
CodeFileBaseClass
Atribut CodeFileBaseClass digunakan dalam kasus di mana Anda ingin beberapa halaman berasal dari satu kelas dasar. Karena implementasi kelas parsial dalam ASP.NET, tanpa atribut ini, kelas dasar yang menggunakan bidang umum bersama untuk kontrol referensi yang dideklarasikan dalam halaman ASPX tidak akan berfungsi dengan baik karena ASP. Mesin kompilasi NET akan secara otomatis membuat anggota baru berdasarkan kontrol di halaman. Oleh karena itu, jika Anda menginginkan kelas dasar umum untuk dua halaman atau lebih di ASP.NET, Anda harus menentukan kelas dasar Anda di atribut CodeFileBaseClass dan kemudian memperoleh setiap kelas halaman dari kelas dasar tersebut. Atribut CodeFile juga diperlukan saat atribut ini digunakan.
CompilationMode
Atribut ini memungkinkan Anda mengatur properti CompilationMode dari halaman ASPX. Properti CompilationMode adalah enumerasi yang berisi nilai Always, Auto, dan Never. Defaultnya adalah Always. Pengaturan Otomatis akan mencegah ASP.NET mengompilasi halaman secara dinamis jika memungkinkan. Mengecualikan halaman dari kompilasi dinamis meningkatkan performa. Namun, jika halaman yang dikecualikan berisi kode yang harus dikompilasi, kesalahan akan muncul saat halaman dijelajahi.
Aktifkan Validasi Peristiwa
Atribut ini menentukan apakah peristiwa postback dan panggilan balik divalidasi atau tidak. Ketika ini diaktifkan, argumen untuk postback atau peristiwa panggilan balik diperiksa untuk memastikan bahwa mereka berasal dari kontrol server yang awalnya merendernya.
Aktifkan Tema
Atribut ini menentukan apakah tema ASP.NET digunakan pada halaman atau tidak. Defaultnya adalah false. ASP.NET tema tercakup dalam Modul 10.
LinePragmas
Atribut ini menentukan apakah pragma baris harus ditambahkan selama kompilasi. Pragma baris adalah opsi yang digunakan oleh debugger untuk menandai bagian kode tertentu.
MaintainScrollPositionOnPostback
Atribut ini menentukan apakah JavaScript disuntikkan ke halaman untuk mempertahankan posisi gulir di antara postback. Atribut ini false secara default.
Ketika atribut ini benar, ASP.NET akan menambahkan <blok skrip> pada postback yang terlihat seperti ini:
<script src="/website/WebResource.axd?d=jBAvpwrdOM_V_Xzeox989A2 &t=632653133849531250" type="text/javascript"> </script>
Perhatikan bahwa src untuk blok skrip ini adalah WebResource.axd. Sumber daya ini bukan jalur fisik. Ketika skrip ini diminta, ASP.NET membangun skrip secara dinamis.
MasterPageFile
Atribut ini menentukan file halaman master untuk halaman saat ini. Jalurnya bisa relatif atau absolut. Halaman master dibahas dalam Modul 4.
Tema Lembar Gaya
Atribut ini memungkinkan Anda untuk mengambil alih properti tampilan antarmuka pengguna yang ditentukan oleh tema ASP.NET 2.0. Tema tercakup dalam Modul 10.
Nilai Tema
Menentukan tema untuk halaman. Jika nilai tidak ditentukan untuk atribut StyleSheetTheme, atribut Tema akan menggantikan semua gaya yang diterapkan ke kontrol pada halaman.
Nilai Judul
Menyetel judul untuk halaman. Nilai yang ditentukan di sini akan muncul di <elemen judul> halaman yang dirender.
LihatStateEncryptionMode
Mengatur nilai untuk enumerasi ViewStateEncryptionMode. Nilai yang tersedia adalah Always, Auto, dan Never. Nilai defaultnya adalah Otomatis. Ketika atribut ini diatur ke nilai Otomatis, viewstate dienkripsi adalah permintaan kontrol dengan memanggil metode RegisterRequiresViewStateEncryption .
Mengatur Nilai Properti Publik melalui Direktif Halaman @
Kemampuan baru lain dari arahan @ Halaman di ASP.NET 2.0 adalah kemampuan untuk mengatur nilai awal properti publik dari kelas dasar. Misalkan, misalnya, Anda memiliki properti publik yang disebut SomeText di kelas dasar Anda dan Anda ingin properti tersebut diinisialisasi ke Halo saat halaman dimuat. Anda dapat menyelesaikan ini hanya dengan mengatur nilai di direktif Halaman @ seperti itu:
<%@Page Language="C#" SomeText="Hello!" Inherits="PageBase" %>
Atribut SomeText dari direktif @ Page menetapkan nilai awal properti SomeText di kelas dasar ke Hello!. Video di bawah ini adalah panduan pengaturan nilai awal properti publik di kelas dasar menggunakan direktif @ Halaman.
Properti Publik Baru dari Kelas Halaman
Properti publik berikut ini baru di ASP.NET 2.0.
AppRelativeTemplateSourceDirectory
Mengembalikan jalur relatif aplikasi ke halaman atau kontrol. Misalnya, untuk halaman yang terletak di http://app/folder/page.aspx, properti mengembalikan ~/folder/.
AppRelativeVirtualPath
Mengembalikan jalur direktori virtual relatif ke halaman atau kontrol. Misalnya untuk halaman yang terletak di http://app/folder/page.aspx, properti mengembalikan ~/folder/page.aspx.
AsyncTimeout
Mendapatkan atau mengatur batas waktu yang digunakan untuk penanganan halaman asinkron. (Halaman asinkron akan dibahas nanti dalam modul ini.)
ClientQueryString
Properti baca-saja yang mengembalikan bagian string kueri dari URL yang diminta. Nilai ini dikodekan URL. Anda dapat menggunakan metode UrlDecode dari kelas HttpServerUtility untuk mendekodenya.
ClientScript
Properti ini mengembalikan objek ClientScriptManager yang dapat digunakan untuk mengelola ASP. Emisi NET dari skrip sisi klien. (Kelas ClientScriptManager tercakup nanti dalam modul ini.)
EnableEventValidation
Properti ini mengontrol apakah validasi peristiwa diaktifkan atau tidak untuk peristiwa postback dan panggilan balik. Saat diaktifkan, argumen untuk memposting balik atau peristiwa panggilan balik diverifikasi untuk memastikan bahwa peristiwa tersebut berasal dari kontrol server yang awalnya merendernya.
AktifkanTugas
Properti ini mendapatkan atau mengatur Boolean yang menentukan apakah tema ASP.NET 2.0 berlaku untuk halaman atau tidak.
Formulir
Properti ini mengembalikan formulir HTML pada halaman ASPX sebagai objek HtmlForm.
Header
Properti ini mengembalikan referensi ke objek HtmlHead yang berisi header halaman. Anda dapat menggunakan objek HtmlHead yang dikembalikan untuk mendapatkan/mengatur lembar gaya, tag Meta, dll.
Pemisah Id
Properti baca-saja ini mendapatkan karakter yang digunakan untuk memisahkan pengidentifikasi kontrol saat ASP.NET membangun ID unik untuk kontrol pada halaman. Ini tidak dimaksudkan untuk digunakan langsung dari kode Anda.
IsAsync
Properti ini memungkinkan halaman asinkron. Halaman asinkron dibahas nanti dalam modul ini.
IsCallback
Properti baca-saja ini mengembalikan true jika halaman adalah hasil dari panggilan balik. Panggilan balik dibahas nanti dalam modul ini.
IsCrossPagePostBack
Properti baca-saja ini mengembalikan true jika halaman adalah bagian dari postback lintas halaman. Postback lintas halaman dibahas nanti dalam modul ini.
Item
Mengembalikan referensi ke instans IDictionary yang berisi semua objek yang disimpan dalam konteks halaman. Anda dapat menambahkan item ke objek IDictionary ini dan item tersebut akan tersedia untuk Anda sepanjang masa pakai konteks.
MaintainScrollPositionOnPostBack
Properti ini mengontrol apakah ASP.NET memancarkan JavaScript atau tidak yang mempertahankan posisi gulir halaman di browser setelah postback terjadi. (Detail properti ini telah dibahas sebelumnya dalam modul ini.)
Master
Properti baca-saja ini mengembalikan referensi ke instans MasterPage untuk halaman tempat halaman master diterapkan.
MasterPageFile
Mendapatkan atau mengatur nama file halaman master untuk halaman tersebut. Properti ini hanya dapat diatur dalam metode PreInit.
MaxPageStateFieldLength
Properti ini mendapatkan atau mengatur panjang maksimum untuk status halaman dalam byte. Jika properti diatur ke angka positif, status tampilan halaman akan dipecah menjadi beberapa bidang tersembunyi sehingga tidak melebihi jumlah byte yang ditentukan. Jika properti adalah angka negatif, status tampilan tidak akan dipecah menjadi potongan.
PageAdapter
Mengembalikan referensi ke objek PageAdapter yang memodifikasi halaman untuk browser yang meminta.
Halaman Sebelumnya
Mengembalikan referensi ke halaman sebelumnya dalam kasus Server.Transfer atau postback lintas halaman.
SkinID
Menentukan kulit ASP.NET 2.0 untuk diterapkan ke halaman.
StyleSheetTheme
Properti ini mendapatkan atau mengatur lembar gaya yang diterapkan ke halaman.
TemplateControl
Mengembalikan referensi ke kontrol yang berisi untuk halaman.
Tema
Mendapatkan atau mengatur nama tema ASP.NET 2.0 yang diterapkan ke halaman. Nilai ini harus diatur sebelum metode PreInit.
Judul
Properti ini mendapatkan atau mengatur judul untuk halaman seperti yang diperoleh dari header halaman.
LihatStateEncryptionMode
Mendapatkan atau mengatur ViewStateEncryptionMode halaman. Lihat diskusi terperinci tentang properti ini sebelumnya dalam modul ini.
Properti Baru yang Dilindungi dari Kelas Halaman
Berikut ini adalah properti baru yang dilindungi dari kelas Halaman di ASP.NET 2.0.
Adaptor
Mengembalikan referensi ke ControlAdapter yang merender halaman pada perangkat yang memintanya.
AsyncMode
Properti ini menunjukkan apakah halaman diproses secara asinkron atau tidak. Ini dimaksudkan untuk digunakan oleh runtime dan tidak langsung dalam kode.
ClientIDSeparator
Properti ini mengembalikan karakter yang digunakan sebagai pemisah saat membuat ID klien unik untuk kontrol. Ini dimaksudkan untuk digunakan oleh runtime dan tidak langsung dalam kode.
PageStatePersister
Properti ini mengembalikan objek PageStatePersister untuk halaman tersebut. Properti ini terutama digunakan oleh pengembang kontrol ASP.NET.
UniqueFilePathSuffix
Properti ini mengembalikan akhiran unik yang ditambahkan ke jalur file untuk browser penembolokan. Nilai defaultnya adalah __ufps= dan angka 6 digit.
Metode Publik Baru untuk Kelas Halaman
Metode publik berikut baru di kelas Halaman di ASP.NET 2.0.
AddOnPreRenderCompleteAsync
Metode ini mendaftarkan delegasi penanganan aktivitas untuk eksekusi halaman asinkron. Halaman asinkron dibahas nanti dalam modul ini.
ApplyStyleSheetSkin
Menerapkan properti dalam lembar gaya halaman ke halaman.
ExecuteRegisteredAsyncTasks
Metode ini menjadi tugas asinkron.
GetValidators
Mengembalikan kumpulan validator untuk grup validasi yang ditentukan atau grup validasi default jika tidak ada yang ditentukan.
RegisterAsyncTask
Metode ini mendaftarkan tugas asinkron baru. Halaman asinkron dibahas nanti dalam modul ini.
RegisterRequiresControlState
Metode ini memberi tahu ASP.NET bahwa status kontrol halaman harus dipertahankan.
RegisterRequiresViewStateEncryption
Metode ini memberi tahu ASP.NET bahwa viewstate halaman memerlukan enkripsi.
ResolveClientUrl
Mengembalikan URL relatif yang dapat digunakan untuk permintaan klien untuk gambar, dll.
SetFocus
Metode ini akan mengatur fokus ke kontrol yang ditentukan ketika halaman awalnya dimuat.
UnregisterRequiresControlState
Metode ini akan membatalkan pendaftaran kontrol yang diteruskan ke dalamnya karena tidak lagi memerlukan persistensi status kontrol.
Perubahan pada Siklus Hidup Halaman
Siklus hidup halaman di ASP.NET 2.0 tidak berubah secara dramatis, tetapi ada beberapa metode baru yang harus Anda waspadai. Siklus hidup halaman ASP.NET 2.0 diuraikan di bawah ini.
PreInit (Baru di ASP.NET 2.0)
Peristiwa PreInit adalah tahap paling awal dalam siklus hidup yang dapat diakses pengembang. Penambahan peristiwa ini memungkinkan perubahan tema ASP.NET 2.0 secara terprogram, halaman master, properti akses untuk profil ASP.NET 2.0, dll. Jika Anda berada dalam status postback, penting untuk menyadari bahwa Viewstate belum diterapkan ke kontrol pada titik ini dalam siklus hidup. Oleh karena itu, jika pengembang mengubah properti kontrol pada tahap ini, kemungkinan akan ditimpa nanti dalam siklus hidup halaman.
Init
Peristiwa Init tidak berubah dari ASP.NET 1.x. Di sinilah Anda ingin membaca atau menginisialisasi properti kontrol di halaman Anda. Pada tahap ini, halaman master, tema, dll. sudah diterapkan ke halaman.
InitComplete (Baru dalam 2.0)
Peristiwa InitComplete dipanggil di akhir tahap inisialisasi halaman. Pada titik ini dalam siklus hidup, Anda dapat mengakses kontrol di halaman, tetapi statusnya belum diisi.
PreLoad (Baru di 2.0)
Kejadian ini dipanggil setelah semua data postback diterapkan dan tepat sebelum Page_Load.
Muat
Peristiwa Muat tidak berubah dari ASP.NET 1.x.
LoadComplete (Baru dalam 2.0)
Peristiwa LoadComplete adalah peristiwa terakhir di tahap pemuatan halaman. Pada tahap ini, semua data postback dan viewstate telah diterapkan ke halaman.
PraRender
Jika Anda ingin viewstate dipertahankan dengan benar untuk kontrol yang ditambahkan ke halaman secara dinamis, peristiwa PraRender adalah kesempatan terakhir untuk menambahkannya.
PreRenderComplete (Baru dalam 2.0)
Pada tahap PreRenderComplete, semua kontrol telah ditambahkan ke halaman dan halaman siap untuk dirender. Peristiwa PreRenderComplete adalah peristiwa terakhir yang dinaikkan sebelum viewstate halaman disimpan.
SaveStateComplete (Baru dalam 2.0)
Peristiwa SaveStateComplete dipanggil segera setelah semua tampilan halaman dan status kontrol telah disimpan. Ini adalah peristiwa terakhir sebelum halaman benar-benar dirender ke browser.
Render
Metode Render tidak berubah sejak ASP.NET 1.x. Di sinilah HtmlTextWriter diinisialisasi dan halaman dirender ke browser.
Postback Lintas Halaman di ASP.NET 2.0
Dalam ASP.NET 1.x, postback diperlukan untuk memposting ke halaman yang sama. Postback lintas halaman tidak diizinkan. ASP.NET 2.0 menambahkan kemampuan untuk memposting kembali ke halaman yang berbeda melalui antarmuka IButtonControl. Kontrol apa pun yang mengimplementasikan antarmuka IButtonControl baru (Button, LinkButton, dan ImageButton selain kontrol kustom pihak ketiga) dapat memanfaatkan fungsionalitas baru ini melalui penggunaan atribut PostBackUrl. Kode berikut menunjukkan kontrol Tombol yang memposting kembali ke halaman kedua.
<asp:Button ID="SubmitReport" PostBackUrl="~/Default.aspx" runat="server" Text="Submit Report" />
Saat halaman diposting kembali, Halaman yang memulai postback dapat diakses melalui properti PreviousPage di halaman kedua. Fungsionalitas ini diimplementasikan melalui fungsi WebForm_DoPostBackWithOptions sisi klien baru yang ASP.NET 2.0 dirender ke halaman saat kontrol memposting kembali ke halaman yang berbeda. Fungsi JavaScript ini disediakan oleh handler WebResource.axd baru yang memancarkan skrip ke klien.
Video di bawah ini adalah panduan postback lintas halaman.
Detail Selengkapnya tentang Postback Lintas Halaman
Viewstate
Anda mungkin sudah bertanya pada diri sendiri tentang apa yang terjadi pada viewstate dari halaman pertama dalam skenario postback lintas halaman. Bagaimanapun, kontrol apa pun yang tidak mengimplementasikan IPostBackDataHandler akan mempertahankan statusnya melalui viewstate, jadi untuk memiliki akses ke properti kontrol tersebut pada halaman kedua postback lintas halaman, Anda harus memiliki akses ke viewstate untuk halaman tersebut. ASP.NET 2.0 menangani skenario ini menggunakan bidang tersembunyi baru di halaman kedua yang disebut __PREVIOUSPAGE. Bidang formulir __PREVIOUSPAGE berisi viewstate untuk halaman pertama sehingga Anda bisa memiliki akses ke properti semua kontrol di halaman kedua.
Menghindari FindControl
Dalam panduan video dari postback lintas halaman, saya menggunakan metode FindControl untuk mendapatkan referensi ke kontrol TextBox di halaman pertama. Metode itu berfungsi dengan baik untuk tujuan itu, tetapi FindControl mahal dan perlu menulis kode tambahan. Untungnya, ASP.NET 2.0 menyediakan alternatif untuk FindControl untuk tujuan ini yang akan berfungsi dalam banyak skenario. Direktif PreviousPageType memungkinkan Anda memiliki referensi yang sangat ditik ke halaman sebelumnya dengan menggunakan TypeName atau atribut VirtualPath. Atribut TypeName memungkinkan Anda menentukan jenis halaman sebelumnya sementara atribut VirtualPath memungkinkan Anda merujuk ke halaman sebelumnya menggunakan jalur virtual. Setelah mengatur direktif PreviousPageType, Anda kemudian harus mengekspos kontrol, dll. yang ingin Anda izinkan aksesnya menggunakan properti publik.
Postback Lintas Halaman Lab 1
Di lab ini, Anda akan membuat aplikasi yang menggunakan fungsionalitas postback lintas halaman baru ASP.NET 2.0.
Buka Visual Studio 2005 dan buat situs web ASP.NET baru.
Tambahkan Webform baru yang disebut page2.aspx.
Buka Default.aspx dalam tampilan Desain dan tambahkan kontrol Tombol dan kontrol Kotak Teks.
- Beri Tombol kontrol ID SubmitButton dan TextBox mengontrol ID UserName.
- Atur properti PostBackUrl dari Tombol ke page2.aspx.
Buka page2.aspx dalam tampilan Sumber.
Tambahkan direktif @ PreviousPageType seperti yang ditunjukkan di bawah ini:
Tambahkan kode berikut ke Page_Load kode page2.aspx di belakang:
Response.Write(PreviousPage.UserName.Text);
Buat proyek dengan mengeklik Build pada menu Build.
Tambahkan kode berikut ke code-behind untuk Default.aspx:
public TextBox txtUserName { get { return this.UserName; } }
Ubah Page_Load di page2.aspx menjadi berikut ini:
Response.Write(PreviousPage.txtUserName.Text);
Bangun proyek.
Jalankan proyek.
Masukkan nama Anda di Kotak Teks dan klik tombol .
Apa hasilnya?
Halaman Asinkron di ASP.NET 2.0
Banyak masalah ketidakcocokan dalam ASP.NET disebabkan oleh latensi panggilan eksternal (seperti layanan Web atau panggilan database), latensi IO file, dll. Ketika permintaan dibuat terhadap aplikasi ASP.NET, ASP.NET menggunakan salah satu utas pekerjanya untuk melayani permintaan tersebut. Permintaan tersebut memiliki utas tersebut hingga permintaan selesai dan respons telah dikirim. ASP.NET 2.0 berupaya mengatasi masalah latensi dengan jenis masalah ini dengan menambahkan kemampuan untuk menjalankan halaman secara asinkron. Itu berarti bahwa utas pekerja dapat memulai permintaan dan kemudian menyerahkan eksekusi tambahan ke utas lain, sehingga kembali ke kumpulan utas yang tersedia dengan cepat. Ketika file IO, panggilan database, dll. telah selesai, utas baru diperoleh dari kumpulan utas untuk menyelesaikan permintaan.
Langkah pertama dalam membuat halaman dijalankan secara asinkron adalah mengatur atribut Asinkron dari arahan halaman seperti:
<%@ Page Async="true" %>
Atribut ini memberi tahu ASP.NET untuk mengimplementasikan IHttpAsyncHandler untuk halaman tersebut.
Langkah selanjutnya adalah memanggil metode AddOnPreRenderCompleteAsync pada titik dalam siklus hidup halaman sebelum PraRender. (Metode ini biasanya dipanggil dalam Page_Load.) Metode AddOnPreRenderCompleteAsync mengambil dua parameter; BeginEventHandler dan EndEventHandler. BeginEventHandler mengembalikan IAsyncResult yang kemudian diteruskan sebagai parameter ke EndEventHandler.
Video di bawah ini adalah panduan permintaan halaman asinkron.
Catatan
Halaman asinkron tidak dirender ke browser hingga EndEventHandler selesai. Tidak diragukan lagi tetapi beberapa pengembang akan menganggap permintaan asinkron mirip dengan panggilan balik asinkron. Penting untuk menyadari bahwa mereka tidak. Manfaat untuk permintaan asinkron adalah bahwa utas pekerja pertama dapat dikembalikan ke kumpulan utas untuk melayani permintaan baru, sehingga mengurangi ketidakcocokan karena terikat IO, dll.
Panggilan Balik Skrip di ASP.NET 2.0
Pengembang web selalu mencari cara untuk mencegah kedipan yang terkait dengan panggilan balik. Dalam ASP.NET 1.x, SmartNavigation adalah metode yang paling umum untuk menghindari kedipan, tetapi SmartNavigation menyebabkan masalah bagi beberapa pengembang karena kompleksitas implementasinya pada klien. ASP.NET 2.0 mengatasi masalah ini dengan panggilan balik skrip. Panggilan balik skrip menggunakan XMLHttp untuk membuat permintaan terhadap server Web melalui JavaScript. Permintaan XMLHttp mengembalikan data XML yang kemudian dapat dimanipulasi melalui DOM browser. Kode XMLHttp disembunyikan dari pengguna oleh handler WebResource.axd baru.
Ada beberapa langkah yang diperlukan untuk mengonfigurasi panggilan balik skrip di ASP.NET 2.0.
Langkah 1 : Terapkan Antarmuka ICallbackEventHandler
Agar ASP.NET mengenali halaman Anda sebagai berpartisipasi dalam panggilan balik skrip, Anda harus menerapkan antarmuka ICallbackEventHandler. Anda dapat melakukan ini di file code-behind Anda seperti:
public partial class _Default : System.Web.UI.Page, ICallbackEventHandler
Anda juga dapat melakukan ini menggunakan direktif @ Menerapkan seperti itu:
<%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
Anda biasanya akan menggunakan direktif @ Implementasi saat menggunakan kode ASP.NET sebaris.
Langkah 2 : Panggil GetCallbackEventReference
Seperti disebutkan sebelumnya, panggilan XMLHttp dienkapsulasi dalam handler WebResource.axd. Saat halaman Anda dirender, ASP.NET akan menambahkan panggilan ke WebForm_DoCallback, skrip klien yang disediakan oleh WebResource.axd. Fungsi WebForm_DoCallback menggantikan fungsi __doPostBack untuk panggilan balik. Ingatlah bahwa __doPostBack secara terprogram mengirimkan formulir di halaman. Dalam skenario panggilan balik, Anda ingin mencegah postback, jadi __doPostBack tidak akan cukup.
Catatan
__doPostBack masih dirender ke halaman dalam skenario panggilan balik skrip klien. Namun, ini tidak digunakan untuk panggilan balik.
Argumen untuk fungsi sisi klien WebForm_DoCallback disediakan melalui fungsi sisi server GetCallbackEventReference yang biasanya akan dipanggil dalam Page_Load. Panggilan umum ke GetCallbackEventReference mungkin terlihat seperti ini:
// Set up the JavaScript callback string cbRef = cm.GetCallbackEventReference(this, "document.getElementById('ddlCompany').value", "ShowCompanyName", "null", true);
Catatan
Dalam hal ini, cm adalah instans ClientScriptManager. Kelas ClientScriptManager akan dibahas nanti dalam modul ini.
Ada beberapa versi GetCallbackEventReference yang kelebihan beban. Dalam hal ini, argumennya adalah sebagai berikut:
this
Referensi ke kontrol tempat GetCallbackEventReference dipanggil. Dalam hal ini, itu adalah halaman itu sendiri.
document.getElementById('ddlCompany').value
Argumen string yang akan diteruskan dari kode sisi klien ke peristiwa sisi server. Dalam hal ini, Saya meneruskan nilai dropdown yang disebut ddlCompany.
ShowCompanyName
Nama fungsi sisi klien yang akan menerima nilai pengembalian (sebagai string) dari peristiwa panggilan balik sisi server. Fungsi ini hanya akan dipanggil ketika panggilan balik sisi server berhasil. Oleh karena itu, demi ketahanan, umumnya disarankan untuk menggunakan versi GetCallbackEventReference yang kelebihan beban yang mengambil argumen string tambahan yang menentukan nama fungsi sisi klien untuk dijalankan jika terjadi kesalahan.
null
String yang mewakili fungsi sisi klien yang dimulai sebelum panggilan balik ke server. Dalam hal ini, tidak ada skrip seperti itu, sehingga argumennya null.
true
Boolean yang menentukan apakah akan melakukan panggilan balik secara asinkron atau tidak.
Panggilan ke WebForm_DoCallback pada klien akan meneruskan argumen ini. Oleh karena itu, ketika halaman ini dirender pada klien, kode tersebut akan terlihat seperti:
WebForm_DoCallback('__Page',document.getElementById('ddlCompany').value, ShowCompanyName,null,null,true)
Perhatikan bahwa tanda tangan fungsi pada klien sedikit berbeda. Fungsi sisi klien melewati 5 string dan Boolean. String tambahan (yang null dalam contoh di atas) berisi fungsi sisi klien yang akan menangani kesalahan apa pun dari panggilan balik sisi server.
Langkah 3 : Kaitkan Peristiwa Kontrol Client-Side
Perhatikan bahwa nilai pengembalian GetCallbackEventReference di atas ditetapkan ke variabel string. String tersebut digunakan untuk menghubungkan peristiwa sisi klien untuk kontrol yang memulai panggilan balik. Dalam contoh ini, panggilan balik dimulai oleh dropdown di halaman, jadi saya ingin menghubungkan peristiwa OnChange .
Untuk menghubungkan peristiwa sisi klien, cukup tambahkan handler ke markup sisi klien sebagai berikut:
// Hook the JavaScript function to the onchange event of the dropdown ddlCompany.Attributes["onchange"] = String.Format("javascript:{0}", cbRef);
Ingat bahwa cbRef adalah nilai pengembalian dari panggilan ke GetCallbackEventReference. Ini berisi panggilan ke WebForm_DoCallback yang ditunjukkan di atas.
Langkah 4 : Daftarkan Skrip Client-Side
Ingat bahwa panggilan ke GetCallbackEventReference menentukan bahwa skrip sisi klien yang disebut ShowCompanyName akan dijalankan ketika panggilan balik sisi server berhasil. Skrip tersebut perlu ditambahkan ke halaman menggunakan instans ClientScriptManager. (Kelas ClientScriptManager akan dibahas nanti dalam modul ini.) Anda melakukan itu seperti itu:
System.Text.StringBuilder clientScript = new System.Text.StringBuilder(""); ClientScriptManager cm = Page.ClientScript; // Create the client script clientScript.Append("function ShowCompanyName(companyName)"); clientScript.Append("{"); clientScript.Append("document.getElementById('CoClicked').innerHTML = \"You chose \" + companyName + \".\";"); clientScript.Append("}"); cm.RegisterClientScriptBlock(this.GetType(), "showCo", clientScript.ToString(), true);
Langkah 5 : Panggil Metode Antarmuka ICallbackEventHandler
ICallbackEventHandler berisi dua metode yang perlu Anda terapkan dalam kode Anda. Mereka adalah RaiseCallbackEvent dan GetCallbackEvent.
RaiseCallbackEvent mengambil string sebagai argumen dan tidak mengembalikan apa pun. Argumen string diteruskan dari panggilan sisi klien ke WebForm_DoCallback. Dalam hal ini, nilai tersebut adalah atribut nilai dari dropdown yang disebut ddlCompany. Kode sisi server Anda harus ditempatkan dalam metode RaiseCallbackEvent. Misalnya, jika panggilan balik Anda membuat WebRequest terhadap sumber daya eksternal, kode tersebut harus ditempatkan di RaiseCallbackEvent.
GetCallbackEvent bertanggung jawab untuk memproses pengembalian panggilan balik ke klien. Tidak memerlukan argumen dan mengembalikan string. String yang dikembalikannya akan diteruskan sebagai argumen ke fungsi sisi klien, dalam hal ini ShowCompanyName.
Setelah menyelesaikan langkah-langkah di atas, Anda siap untuk melakukan panggilan balik skrip di ASP.NET 2.0.
Panggilan balik skrip di ASP.NET didukung di browser apa pun yang mendukung panggilan XMLHttp. Itu termasuk semua browser modern yang digunakan saat ini. Internet Explorer menggunakan objek XMLHttp ActiveX sementara browser modern lainnya (termasuk IE 7 yang akan datang) menggunakan objek XMLHttp intrinsik. Untuk menentukan secara terprogram apakah browser mendukung panggilan balik, Anda dapat menggunakan properti Request.Browser.SupportCallback . Properti ini akan mengembalikan true jika klien yang meminta mendukung panggilan balik skrip.
Bekerja dengan Skrip Klien di ASP.NET 2.0
Skrip klien di ASP.NET 2.0 dikelola melalui penggunaan kelas ClientScriptManager. Kelas ClientScriptManager melacak skrip klien menggunakan jenis dan nama. Ini mencegah skrip yang sama dimasukkan secara terprogram pada halaman lebih dari sekali.
Catatan
Setelah skrip berhasil didaftarkan di halaman, setiap upaya berikutnya untuk mendaftarkan skrip yang sama hanya akan mengakibatkan skrip tidak didaftarkan untuk kedua kalinya. Tidak ada skrip duplikat yang ditambahkan dan tidak ada pengecualian yang terjadi. Untuk menghindari komputasi yang tidak perlu, ada metode yang dapat Anda gunakan untuk menentukan apakah skrip sudah terdaftar sehingga Anda tidak mencoba mendaftarkannya lebih dari sekali.
Metode ClientScriptManager harus akrab dengan semua pengembang ASP.NET saat ini:
RegisterClientScriptBlock
Metode ini menambahkan skrip ke bagian atas halaman yang dirender. Ini berguna untuk menambahkan fungsi yang akan secara eksplisit dipanggil pada klien.
Ada dua versi metode ini yang kelebihan beban. Tiga dari empat argumen adalah umum di antara mereka. Topologi tersebut adalah:
type (string)
Argumen jenis mengidentifikasi jenis untuk skrip. Umumnya merupakan ide yang baik untuk menggunakan jenis halaman (ini. GetType()) untuk jenis tersebut.
key (string)
Argumen kunci adalah kunci yang ditentukan pengguna untuk skrip. Ini harus unik untuk setiap skrip. Jika Anda mencoba menambahkan skrip dengan kunci yang sama dan jenis skrip yang sudah ditambahkan, skrip tersebut tidak akan ditambahkan.
script (string)
Argumen skrip adalah string yang berisi skrip aktual untuk ditambahkan. Disarankan agar Anda menggunakan StringBuilder untuk membuat skrip lalu menggunakan metode ToString() pada StringBuilder untuk menetapkan argumen skrip .
Jika Anda menggunakan RegisterClientScriptBlock yang kelebihan beban yang hanya mengambil tiga argumen, Anda harus menyertakan elemen skrip (<skrip> dan </skrip>) dalam skrip Anda.
Anda dapat memilih untuk menggunakan kelebihan beban RegisterClientScriptBlock yang mengambil argumen keempat. Argumen keempat adalah Boolean yang menentukan apakah ASP.NET harus menambahkan elemen skrip untuk Anda atau tidak. Jika argumen ini benar, skrip Anda tidak boleh menyertakan elemen skrip secara eksplisit.
Gunakan metode IsClientScriptBlockRegistered untuk menentukan apakah skrip telah terdaftar. Ini memungkinkan Anda untuk menghindari upaya untuk mendaftarkan ulang skrip yang telah didaftarkan.
RegisterClientScriptInclude (Baru di 2.0)
Tag RegisterClientScriptInclude membuat blok skrip yang ditautkan ke file skrip eksternal. Ini memiliki dua kelebihan beban. Satu mengambil kunci dan URL. Yang kedua menambahkan argumen ketiga yang menentukan jenisnya.
Misalnya, kode berikut menghasilkan blok skrip yang ditautkan ke jsfunctions.js di akar folder skrip aplikasi:
ClientScriptManager cm = Page.ClientScript; if(!cm.IsClientScriptIncludeRegistered("jsfunc")) { cm.RegisterClientScriptInclude(this.GetType(), "jsfunc", "/scripts/jsfunctions.js"); }
Kode ini menghasilkan kode berikut di halaman yang dirender:
<script src="/scripts/jsfunctions.js" type="text/javascript"></script>
Catatan
Blok skrip dirender di bagian bawah halaman.
Gunakan metode IsClientScriptIncludeRegistered untuk menentukan apakah skrip telah terdaftar. Ini memungkinkan Anda menghindari upaya untuk mendaftarkan ulang skrip.
RegisterStartupScript
Metode RegisterStartupScript mengambil argumen yang sama dengan metode RegisterClientScriptBlock. Skrip yang terdaftar dengan RegisterStartupScript dijalankan setelah halaman dimuat tetapi sebelum peristiwa sisi klien OnLoad. Dalam 1.X, skrip yang terdaftar di RegisterStartupScript ditempatkan tepat sebelum tag penutupan </formulir> sementara skrip yang terdaftar di RegisterClientScriptBlock ditempatkan segera setelah tag formulir> pembuka<. Dalam ASP.NET 2.0, keduanya ditempatkan segera sebelum tag penutup </formulir> .
Catatan
Jika Anda mendaftarkan fungsi dengan RegisterStartupScript, fungsi tersebut tidak akan dijalankan sampai Anda secara eksplisit memanggilnya dalam kode sisi klien.
Gunakan metode IsStartupScriptRegistered untuk menentukan apakah skrip telah terdaftar dan menghindari upaya untuk mendaftarkan ulang skrip.
Metode ClientScriptManager Lainnya
Berikut adalah beberapa metode berguna lainnya dari kelas ClientScriptManager.
GetCallbackEventReference | Lihat panggilan balik skrip sebelumnya dalam modul ini. |
---|---|
GetPostBackClientHyperlink | Mendapatkan referensi JavaScript (javascript:<call>) yang dapat digunakan untuk memposting kembali dari peristiwa sisi klien. |
GetPostBackEventReference | Mendapatkan string yang dapat digunakan untuk memulai posting kembali dari klien. |
GetWebResourceUrl | Mengembalikan URL ke sumber daya yang disematkan dalam rakitan. Harus digunakan bersama dengan RegisterClientScriptResource. |
RegisterClientScriptResource | Mendaftarkan sumber daya Web dengan halaman. Ini adalah sumber daya yang disematkan dalam perakitan dan ditangani oleh handler WebResource.axd baru. |
RegisterHiddenField | Mendaftarkan bidang formulir tersembunyi dengan halaman. |
RegisterOnSubmitStatement | Mendaftarkan kode sisi klien yang dijalankan saat formulir HTML dikirimkan. |