Dalam aplikasi ASP.NET, ada banyak cara untuk menavigasi antar formulir Web: menggunakan hyperlink, menggunakan Response.Redirect, menggunakan Server.Transfer, atau menggunakan Server.Execute. Artikel ini akan menganalisis persamaan, perbedaan, serta kelebihan dan kekurangan keempat metode navigasi tersebut untuk membantu Anda memilih metode navigasi terbaik.
1. Hyperlink
Cara paling sederhana untuk memasukkan form lain dari satu form adalah dengan menggunakan kontrol hyperlink HTML. Dalam formulir Web, gunakan kelas kode HTML hyperlink seperti:
<a href="WebForm2.aspx">Masukkan Formulir 2</a>
Ketika pengguna mengklik hyperlink, WebForm2.aspx dijalankan dan hasilnya dikirim ke peramban. Navigasi hyperlink dapat digunakan hampir di mana saja, termasuk halaman HTML dan halaman ASP biasa. ASP.NET juga menyediakan metode alternatif lain, yaitu kontrol server HyperLink:
<form id="Form1" method="post" runat="server">
<asp:HyperLink id="HyperLink1" runat=" server"
NavigateUrl="WebForm2 .aspx">Masukkan Formulir 2</asp:HyperLink>
</form>
Hasil menjalankan kode HTML di atas sama dengan contoh pertama, karena ASP.NET memperlakukan kontrol server Web HyperLink sebagai kontrol super Link HTML. Namun ada satu perbedaan penting antara keduanya. Kontrol server Web HyperLink dapat diprogram di sisi server. Secara khusus, properti NavigateUrl-nya dapat diubah dalam kode program, memungkinkan konstruksi hyperlink yang target spesifiknya dapat berubah secara dinamis berdasarkan keadaan aplikasi saat ini, misalnya:
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e Sebagai System.EventArgs) _
Menangani Button1.Click
HyperLink1.NavigateUrl = "WebForm3.aspx"
End Sub
Setelah kode ini dijalankan, jika pengguna mengklik link tersebut, dia akan melihat WebForm3.aspx, bukan WebForm2.aspx.
2. Gunakan program untuk mengontrol pengalihan
Meskipun hyperlink dapat bernavigasi dari satu halaman ke halaman lain, metode navigasi ini sepenuhnya dikontrol oleh pengguna. Terkadang, kita mungkin perlu menggunakan kode untuk mengontrol keseluruhan proses navigasi, termasuk kapan harus menuju ke halaman lain. Dalam situasi ini, ASP.NET memiliki tiga cara berbeda untuk mencapai tujuan serupa: memanggil metode Redirect dari objek Response, dan memanggil metode Transfer atau Execute dari objek Server. Perilaku ketiga metode navigasi ini pada dasarnya serupa, namun terdapat perbedaan.
2.1 Response.Redirect
Metode Response.Redirect menyebabkan browser terhubung ke URL tertentu. Saat metode Response.Redirect() dipanggil, metode ini akan membuat respons dengan kode status 302 (menunjukkan bahwa target telah berubah) dan URL target baru di header respons. Browser menerima respons dari server dan menggunakan informasi di header respons untuk mengeluarkan permintaan URL baru.
Artinya, ketika menggunakan metode Response.Redirect, operasi pengalihan terjadi di sisi klien dan melibatkan total dua komunikasi dengan server (dua perjalanan bolak-balik): yang pertama adalah permintaan untuk halaman asli, yang mendapat a Respons 302, dan yang kedua Kali kedua adalah meminta halaman baru yang dideklarasikan dalam respons 302 dan mendapatkan halaman tersebut setelah pengalihan.
2.2 Server.Transfer
Metode Server.Transfer mentransfer aliran eksekusi dari file ASPX saat ini ke halaman ASPX lain di server yang sama. Ketika Server.Transfer dipanggil, eksekusi halaman ASPX saat ini dihentikan dan aliran eksekusi ditransfer ke halaman ASPX lain, namun halaman ASPX baru masih menggunakan aliran respons yang dibuat oleh halaman ASPX sebelumnya.
Jika Anda menggunakan metode Server.Transfer untuk bernavigasi antar halaman, URL di browser tidak akan berubah, karena pengalihan sepenuhnya dilakukan di sisi server, dan browser tidak mengetahui bahwa server telah melakukan perubahan halaman.
Secara default, metode Server.Transfer tidak meneruskan data formulir atau string kueri dari satu halaman ke halaman lain, tetapi selama parameter kedua dari metode ini disetel ke True, data formulir halaman pertama dapat dipertahankan dan dikueri rangkaian.
Pada saat yang sama, satu hal yang perlu diperhatikan saat menggunakan Server.Transfer: halaman target akan menggunakan aliran respons yang dibuat oleh halaman asli, yang menyebabkan Pemeriksaan Otentikasi Mesin (MAC) ASP.NET menganggap bahwa Status Tampilan halaman baru telah dirusak. Oleh karena itu, jika Anda ingin mempertahankan data formulir dan kumpulan string kueri dari halaman asli, Anda harus mengatur properti EnableViewStateMac dari arahan Halaman dari halaman target ke False.
2.3 Server.Execute
Metode Server.Execute memungkinkan halaman ASPX saat ini untuk mengeksekusi halaman ASPX tertentu di server Web yang sama. Ketika halaman ASPX tertentu dijalankan, aliran kontrol kembali ke lokasi di mana halaman asli mengeluarkan Server.Execute panggilan.
Metode navigasi halaman ini mirip dengan pemanggilan fungsi untuk halaman ASPX. Halaman yang dipanggil dapat mengakses data formulir dan kumpulan string kueri dari halaman pemanggil, sehingga properti EnableViewStateMac dari perintah Halaman dari halaman yang dipanggil harus disetel ke False.
Secara default, keluaran halaman yang dipanggil ditambahkan ke aliran respons saat ini. Namun, metode Server.Execute memiliki metode kelebihan beban yang memungkinkan output dari halaman yang dipanggil diperoleh melalui objek TextWriter (atau sub-objeknya, seperti objek StringWriter), daripada menambahkan langsung ke aliran output, jadi bahwa di halaman asli Anda dapat dengan mudah mengatur letak hasil keluaran halaman yang dipanggil.
Untuk mengilustrasikan proses kerjanya, mari buat formulir Web, masukkan kontrol tombol (Button1) dan kontrol teks (Literal1), beralih ke tampilan kode di antarmuka desain, tambahkan pernyataan Impor pada namespace System.IO, dan lalu Tambahkan kode yang dieksekusi ketika pengguna mengklik tombol:
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
Dim sw As StringWriter = New StringWriter()
Server.Execute( "WebForm2.aspx", sw)
Literal1.Text = sw.ToString()
End Sub
Kemudian buat halaman kedua WebForm2.aspx untuk aplikasi web yang sama. Buka tampilan HTML halaman dan ubah perintah Halamannya untuk menonaktifkan pemeriksaan ViewState:
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm2.aspx.vb"
Inherits="Navigate.WebForm2" EnableViewStateMac= "false "%>
Buka lagi tampilan desain dan tambahkan beberapa kontrol ke halaman kedua. Selanjutnya, atur halaman pertama sebagai halaman default dan mulai aplikasi. Klik tombol tersebut, dan kontrol WebForm2 akan ditampilkan di mana tombol Literal ditempatkan di WebForm1, seperti yang ditunjukkan pada Gambar 1. Perhatikan bahwa judul halaman dan URL tetap menampilkan halaman asli WebForm1.
Gambar 1: Gunakan Server.Execute untuk menggabungkan dua file sumber.
Saat menggunakan metode Server.Transfer atau Server.Execute untuk menerapkan navigasi, satu hal yang perlu diperhatikan: halaman terakhir mungkin bukan halaman HTML yang sah, karena halaman tersebut pada akhirnya dikembalikan ke klien Mungkin berisi beberapa tag <HTML> dan <BODY>. Internet Explorer tampaknya mentolerir dan menangani situasi ini dengan benar, tetapi jika Anda ingin menggunakan browser lain, sebaiknya Anda mengujinya dengan cermat.
3. Perbandingan dan pemilihan
Karena ada begitu banyak cara untuk bernavigasi dari satu halaman ke halaman lainnya, bagaimana sebaiknya Anda memilih metode navigasi terbaik? Berikut adalah beberapa faktor yang perlu dipertimbangkan:
·Hyperlink adalah yang terbaik jika Anda ingin pengguna memutuskan kapan harus berpindah halaman dan halaman mana yang akan dituju.
·Jika Anda ingin menggunakan program untuk mengontrol target konversi, namun waktu konversi ditentukan oleh pengguna, gunakan kontrol HyperLink dari server Web untuk mengatur properti NavigateUrl secara dinamis.
·Jika Anda ingin menghubungkan pengguna ke sumber daya di server lain, gunakan Response.Redirect.
· Gunakan Response.Redirect untuk menghubungkan pengguna ke sumber daya non-ASPX, seperti halaman HTML.
· Jika Anda ingin mempertahankan string kueri sebagai bagian dari URL, gunakan Response.Redirect.
·Jika Anda ingin mentransfer proses eksekusi ke halaman ASPX lain di server Web yang sama, Anda harus menggunakan Server.Transfer daripada Response.Redirect, karena Server.Transfer dapat menghindari komunikasi jaringan yang tidak perlu, sehingga memperoleh kinerja dan efek penelusuran yang lebih baik.
· Jika Anda ingin menangkap hasil output dari satu halaman ASPX dan kemudian memasukkan hasilnya ke halaman ASPX lain di lokasi tertentu, gunakan Server.Execute.
·Jika Anda ingin memastikan bahwa keluaran HTML legal, silakan gunakan Response.Redirect, jangan gunakan metode Server.Transfer atau Server.Execute.
Artikel ini diterjemahkan dari: http://www.ondotnet.com/pub/a/dotnet/2003/04/07/aspnetnav.html