-
Anda dapat menggunakan kontrol Substitusi untuk membuat area pada halaman web yang dapat diperbarui secara dinamis dan selanjutnya diintegrasikan ke dalam halaman cache.
1. Rencana
Gunakan kontrol Substitusi untuk menentukan bagian halaman web tempat Anda ingin menyimpan output konten dinamis dalam cache. Untuk halaman yang sebagian besar kontennya di-cache, kontrol Substitusi memberikan solusi sederhana untuk cache halaman parsial. Anda dapat menyimpan output seluruh halaman dalam cache dan kemudian menggunakan kontrol Substitusi untuk menentukan bagian halaman yang tidak di-cache. Area cache dijalankan hanya sekali dan akan dibaca dari cache hingga entri cache kedaluwarsa atau dihapus. Wilayah dinamis dijalankan setiap kali halaman diminta. Model caching ini menyederhanakan pengkodean untuk halaman web yang sebagian besar kontennya statis karena Anda tidak perlu merangkum konten statis ini dalam kontrol pengguna Web untuk memasukkannya ke dalam cache. Misalnya, model caching ini berguna untuk halaman web yang berisi konten statis (seperti berita) dan kontrol AdRotator yang menampilkan iklan. Berita tidak sering berubah, artinya dapat disimpan dalam cache. Anda mungkin ingin menampilkan iklan baru setiap kali pengguna meminta halaman tersebut. Kontrol AdRotator secara langsung mendukung penggantian pasca-cache, yang menampilkan iklan baru di setiap postback laman web terlepas dari apakah laman web di-cache atau tidak.
2. Latar Belakang
Saat Anda melakukan cache halaman web ASP.NET, secara default, semua output dari halaman tersebut di-cache. Pada permintaan pertama, halaman akan dijalankan dan outputnya akan di-cache. Untuk permintaan selanjutnya, ini akan dilakukan melalui caching dan kode pada halaman tersebut tidak akan berjalan.
Dalam beberapa kasus, Anda mungkin ingin tidak hanya menyimpan halaman web ASP.NET dalam cache, tetapi juga memperbarui bagian halaman yang dipilih setiap kali halaman tersebut diminta. Misalnya, Anda mungkin ingin menyimpan sebagian besar halaman dalam cache, namun perlu memperbarui informasi yang sangat sensitif terhadap waktu pada halaman tersebut secara dinamis.
Anda dapat menggunakan kontrol Substitusi untuk menyisipkan konten dinamis ke halaman cache. Kontrol Substitusi tidak memberikan markup apa pun. Oleh karena itu, Anda perlu mengikat kontrol ke metode di halaman web atau kontrol pengguna induk. Anda perlu membuat metode statis yang mengembalikan informasi untuk dimasukkan ke dalam halaman web. Metode yang disebut dengan Kontrol substitusi harus memenuhi kriteria berikut:
·Harus berupa metode statis (dibagikan dalam Visual Basic).
·Harus menerima parameter tipe HttpContext.
·Harus mengembalikan nilai bertipe String.
Kontrol Substitusi tidak memiliki akses ke kontrol lain di halaman web, yang berarti Anda tidak dapat memeriksa atau mengubah nilai kontrol lain. Namun, kode tersebut dapat mengakses konteks halaman saat ini menggunakan parameter yang diteruskan ke sana.
Ketika halaman berjalan, kontrol Substitusi memanggil metode ini dan kemudian menggantikan kontrol Substitusi pada halaman dengan nilai kembalian dari metode tersebut.
contoh kode
Contoh berikut menunjukkan cara menggunakan kontrol Substitusi untuk membuat konten yang dapat diperbarui secara dinamis pada halaman cache. Kode di acara Load halaman memperbarui kontrol Label dengan waktu saat ini. Karena durasi cache halaman telah diatur ke 60 detik, teks kontrol Label tidak berubah, meskipun halaman diminta beberapa kali dalam jangka waktu 60 detik. Kontrol Substitusi pada halaman memanggil metode statis GetTime, yang mengembalikan waktu saat ini sebagai string. Setiap kali halaman web di-refresh, nilai yang diwakili oleh kontrol Substitusi diperbarui.
<%@ Halaman Bahasa="C#" %>
<%@ Durasi OutputCache=60 VaryByParam="Tidak Ada" %>
<skrip runat="server">
batalkan Halaman_Muat()
{
Label1.Teks = DateTime.Sekarang.ToString();
}
GetTime String statis publik (konteks HttpContext)
{
return DateTime.Sekarang.ToString();
}
</skrip>
<html>
<head runat="server"></head>
<tubuh>
<form id="form1" runat="server">
<div>
<p>
<asp:Label runat="server" ID="Label1" />
</p>
<p>
<asp:Pergantian runat="server"
ID="Substitusi1"
Nama Metode="DapatkanWaktu" />
</p>
<p>
<asp:Tombol runat="server" ID="Tombol1" Text="Kirim"/>
</p>
</div>
</bentuk>
</tubuh>
</html>
3. Kelas pergantian
Gunakan kontrol Substitusi untuk menentukan bagian halaman web cache keluaran yang ingin Anda ganti kontrolnya dengan konten dinamis. Kontrol Substitusi memberikan solusi sederhana untuk menyimpan sebagian halaman dalam cache untuk halaman yang sebagian besar kontennya akan di-cache. Anda dapat mengeluarkan cache seluruh halaman dan kemudian menggunakan kontrol Substitusi untuk menentukan bagian halaman yang dikecualikan dari cache. Area yang perlu di-cache dijalankan hanya sekali dan kemudian dibaca dari cache hingga item cache kedaluwarsa atau dihapus. Wilayah dinamis dijalankan setiap kali halaman diminta. Model caching ini menyederhanakan kode untuk halaman dengan konten statis karena bagian ini tidak harus dienkapsulasi untuk caching di kontrol pengguna Web. Misalnya, model cache ini berguna jika halaman berisi konten statis (seperti artikel berita) dan kontrol AdRotator yang menampilkan iklan. Artikel berita tidak berubah, artinya dapat disimpan dalam cache. Namun, Anda ingin menampilkan iklan baru setiap kali pengguna meminta halaman tersebut. Kontrol AdRotator secara langsung mendukung penggantian pasca-cache, yang menampilkan iklan baru ketika laman diposkan kembali, terlepas dari apakah laman tersebut di-cache atau tidak.
Catatan: Kontrol Substitusi dapat ditempatkan di kontrol pengguna yang terdapat di halaman cache. Namun, Anda tidak dapat menempatkan kontrol Substitusi dalam kontrol pengguna cache keluaran.
Ketika kontrol Substitusi dijalankan, metode yang mengembalikan string dipanggil. String yang dikembalikan oleh metode ini adalah konten yang akan ditampilkan di lokasi kontrol Substitusi pada halaman. Gunakan properti MethodName untuk menentukan nama metode panggilan balik yang akan dipanggil ketika kontrol Substitusi dijalankan. Metode panggilan balik yang ditentukan harus berupa metode statis pada halaman atau kontrol pengguna yang berisi kontrol Substitusi. Tanda tangan metode panggilan balik harus cocok dengan tanda tangan delegasi HttpResponseSubstitutionCallback yang menerima parameter HttpContext dan mengembalikan string.
Untuk mengoperasikan cache keluaran halaman, Anda dapat menggunakan direktif @OutputCache, kelas HttpCachePolicy, atau properti Cache.
Cara lain untuk menggunakan kontrol Substitusi adalah dengan menggunakan delegasi HttpResponseSubstitutionCallback untuk menerapkan perilaku penggantian cache. Selain itu, perilaku penggantian cache dapat diterapkan pada kontrol yang secara langsung mendukung fungsionalitas penggantian cache, seperti kontrol AdRotator.
Contoh
Contoh kode berikut menunjukkan cara menambahkan kontrol Substitusi secara deklaratif ke halaman web cache keluaran. Saat halaman dimuat, pengguna diperlihatkan tanggal dan waktu saat ini di tab. Area halaman ini di-cache dan diperbarui setiap 60 detik. Ketika kontrol Substitusi dijalankan, metode GetCurrentDateTime dipanggil. String yang dikembalikan oleh GetCurrentDateTime akan ditampilkan kepada pengguna. Bagian halaman ini tidak di-cache dan diperbarui setiap kali halaman di-refresh.
<%@ outputcache durasi="60" bervariasibyparam="tidak ada" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transisi//EN"
" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<skrip runat = "server" bahasa = "C#">
void Page_Load(pengirim objek, System.EventArgs e)
{
// Menampilkan tanggal dan waktu saat ini pada label.
// Caching keluaran berlaku untuk bagian halaman ini.
CachedDateLabel.Teks = DateTime.Sekarang.ToString();
}
// Kontrol Substitusi memanggil metode ini untuk mengambil
// tanggal dan waktu saat ini
// dikecualikan dari cache keluaran.
string statis publik GetCurrentDateTime (konteks HttpContext)
{
return DateTime.Sekarang.ToString();
}
</skrip>
<html>
<head runat="server">
<title>Contoh Kelas Substitusi</title>
</kepala>
<tubuh>
<form id="form1" runat="server">
<h3>Contoh Kelas Substitusi</h3>
<p>Bagian laman ini tidak disimpan dalam cache:</p>
<asp:substitution id="Substitusi1"
nama metode = "Dapatkan Tanggal Saat Ini Waktu"
runat="Server">
</asp:substitusi>
<br />
<p>Bagian halaman ini di-cache:</p>
<asp:label id="CachedDateLabel"
runat="Server">
</asp:label>
<br /><br />
<asp:button id="Tombol Segarkan"
teks="Segarkan Halaman"
runat="Server">
</asp:tombol>
</bentuk>
</tubuh>